首页 > 其他 > 详细

Factory

时间:2020-03-11 09:59:56      阅读:44      评论:0      收藏:0      [点我收藏+]

父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责
技术分享图片

/**
 * 产品
 */
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卡
    }
}

Factory

原文:https://www.cnblogs.com/fly-book/p/12460206.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!