デザインパターン Flyweightパターン
メモ。使う機会あるかな?
package com.flyweight01; public class HumanLetter { private String letter; public HumanLetter(String letter){ this.letter = letter; } public void display(){ System.out.println(letter); } }
package com.flyweight01; import java.util.HashMap; import java.util.Map; public class HumanLetterFactory { private Map<String,HumanLetter> map = new HashMap<String,HumanLetter>(); // singletonパターン public static HumanLetterFactory singleton = new HumanLetterFactory(); private HumanLetterFactory(){ } public static HumanLetterFactory getInstance(){ return singleton; } public int countInstance(){ return map.size(); } public synchronized HumanLetter getHumanLetter(String letter){ HumanLetter humanLetter = map.get(letter); if (humanLetter == null) { humanLetter = new HumanLetter(letter); map.put(letter, humanLetter); } return humanLetter; } }
package com.flyweight01; public class Main { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ HumanLetterFactory factory = HumanLetterFactory.getInstance(); // インスタンスが生成される factory.getHumanLetter("a").display(); factory.getHumanLetter("b").display(); factory.getHumanLetter("c").display(); // インスタンスは生成されない factory.getHumanLetter("a").display(); factory.getHumanLetter("b").display(); factory.getHumanLetter("c").display(); // インスタンスの個数 3 System.out.println(factory.countInstance()); } }