Factory
父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责
/**
* 产品
*/
public abstract class Product {
public abstract void use();
}
/**
* 工厂
*/
public abstract class Factory {
public final Product create(String owner){
Product p = createProduct(owner);//调用生成实例的专用方法,可以防止父类与其他具体类耦合
registerProduct(p);
return p;
}
protected abstract Product createProduct(String owner);//生成产品
protected abstract void registerProduct(Product product);//注册产品
}
public class IDCard extends Product {
private String owner;
public IDCard(String owner) {
System.out.println("制作 "+owner+" 的ID卡");
this.owner = owner;
}
@Override
public void use() {
System.out.println("使用 "+owner+" 的ID卡");
}
public String getOwner() {
return owner;
}
}
public class IDCardFactory extends Factory {
private List owners = new ArrayList();
@Override
protected Product createProduct(String owner) {
return new IDCard(owner);
}
@Override
protected void registerProduct(Product product) {
owners.add(((IDCard)product).getOwner());
}
public List getOwners() {
return owners;
}
}
public class Main {
public static void main(String[] args){
Factory factory = new IDCardFactory();
Product c1 = factory.create("a");
Product c2 = factory.create("b");
Product c3 = factory.create("c");
c1.use();
c2.use();
c3.use();
//制作 a 的ID卡
//制作 b 的ID卡
//制作 c 的ID卡
//使用 a 的ID卡
//使用 b 的ID卡
//使用 c 的ID卡
}
}