デザインパターン - FlyWeight
【flyweightパターンとは】
インスタンスを共有して、メモリを節約する。
【flyweightパターンのクラス図】
【flyweightパターンのメリット】
オブジェクトが状態を持つごとで、オブジェクトの利用者は状態による違う振る舞いを気にする必要なくなる。
【サンプル】
CharFactory.java |
package flyweight;
import java.util.HashMap;
import java.util.Map;
// 文字生成工場
public class CharFactory {
private Map<String, Character> charMap = new HashMap<String, Character>();
private static CharFactory singleton = new CharFactory();
private CharFactory() {
System.out.println("CharFactoryが生成されました");
}
// singletonデザインパターン
public static CharFactory getInstance() {
return singleton;
}
// マルチスサーフ
public synchronized Character getChar(String s) {
Character c = charMap.get(s);
if (c == null) {
System.out.println(s + "がなかったので、生成し保存しました。");
charMap.put(s, new Character(s.charAt(0)));
c = charMap.get(s);
}
return c;
}
}
|
FlyWeightTest.java |
package flyweight;
public class FlyWeightTest {
/**
* @param args
*/
public static void main(String[] args) {
CharFactory factory = CharFactory.getInstance();
// 「a」表示
System.out.println(factory.getChar("a"));
// 「a」を50回表示
for (int i = 0; i < 50; i++) {
// 上で生成されているので、生成せず使うだけ
System.out.print(factory.getChar("a"));
}
System.out.println();
// 「b」表示
System.out.println(factory.getChar("b"));
}
}
|
実行結果 |
CharFactoryが生成されました
aがなかったので、生成し保存しました。
a
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bがなかったので、生成し保存しました。
b
|