也就是減少new出新的物件佔據記憶體。
在整個Pattern的運作上,利用一個Factory Pool,
當需要新的物件會先向Factory查詢,
如果在Pool內已經存在,那就直接由pool內取得回傳,
若pool內沒有,才new出新物件,並存到pool內,
讓以後要用的可以取用
如此,所有相同的物件都只會被new出一個實體,
若有需要用到相同的實體,只需取用既有的instance即可
參與者
1.Animal 產生各式物件的Class
使用者要產生animal 實體,若在一般程式上會直接
new Animal,但在這Pattern下,new Animal動作是由
Factory來執行,而非由外部程式來直接產生物件
public class Animal {
private String name;
public Animal(String name){
this.name=name;
System.out.println(this.name+"--Created\n");
}
public void run(){
System.out.print(this.name+"--run\n");
}
}
2.Factory 管理所有物件的Factory
利用一個Hashtable當作pool來儲存可攻使用的instance
public class Factory {
private Hashtable<String, Animal> pool=new Hashtable<String, Animal>();
private static Factory instance=new Factory();
public static Factory getInstance(){
return instance;
}
public synchronized Animal getAnimal(String name){
if(pool.get(name)==null){
Animal tmpAnimal=new Animal(name);
pool.put(name,tmpAnimal);
return tmpAnimal;
}else{
return pool.get(name);
}
}
}
3.Main外部程式
public class Main {
public static void main(String[] args) {
Factory factory=Factory.getInstance();
factory.getAnimal("man").run();
factory.getAnimal("dog").run();
factory.getAnimal("man").run();
factory.getAnimal("cat").run();
factory.getAnimal("dog").run();
factory.getAnimal("dog").run();
}
}
4輸出結果由結果可以看出,每種animal都只會被產生一次
man--Created
man--run
dog--Created
dog--run
man--run
cat--Created
cat--run
dog--run
dog--run
沒有留言:
張貼留言