Factory

父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责
image-20200310085850380

/**
 * 产品
 */
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卡
    }
}
posted @ 2020-03-11 08:18  fly_bk  阅读(446)  评论(0编辑  收藏  举报