Factory Method Pattern
在父类规定对象的创建方法,但并没有深入到具体的类名,所有具体的完整内容都放在子类。
根据这个原则,我们可以大致分成产生对象实例的大纲(框架)和实际产生对象实例的类。
package com.sw.Framework;
/**
* 以抽象的方法createProduct制作产品。
* 再利用抽象方法registerProduct注册产品。
* 其中制作产品和注册产品都由之类负责。
* 产生Product参与者的抽象类。
* @author sw
*
*/
public abstract class Factory {
public final Product create(String owner){
Product p = createProduct(owner);
registerProduct(p);
return p ;
}
public abstract Product createProduct(String owner);
public abstract void registerProduct(Product product);
}
package com.sw.Framework;
//框架的部分,规定此Pattern所产生的对象实例应有的接口(API)。
public abstract class Product {
public abstract void use() ;
}
package com.sw.idcard;
import com.sw.Framework.Product;
//实际产品的参与者。规定具体的产品样式。
public class IDCard extends Product {
private String owner ;
IDCard(String owner){
System.out.println("建立"+owner+"的卡");
this.owner = owner ;
}
public void use() {
System.out.println("使用"+owner+"的卡");
}
public String getOwner(){
return this.owner ;
}
}
package com.sw.idcard;
import java.util.Vector;
import com.sw.Framework.Factory;
import com.sw.Framework.Product;
//规定制造实际产品的类
public class IDCardFactory extends Factory {
private Vector owners = new Vector();
public Product createProduct(String owner) {
return new IDCard(owner);
}
public void registerProduct(Product product) {
owners.add(((IDCard)product).getOwner());
}
public Vector getOwners(){
return owners ;
}
}
package com.sw.idcard;
import java.util.Iterator;
import com.sw.Framework.Factory;
import com.sw.Framework.Product;
public class main {
public static void main(String[] args){
Factory factory = new IDCardFactory();
Product card1 = factory.create("大法师");
Product card2 = factory.create("恶魔猎手");
Product card3 = factory.create("剑圣");
card1.use();
card2.use();
card3.use();
Iterator it = ((IDCardFactory)factory).getOwners().iterator();
System.out.println("所有用户信息:");
while(it.hasNext()){
System.out.print(it.next()+" ");
}
}
}