(3) 设计模式笔记[工厂模式]

    技术2022-05-18  17

    package com.vatana.factory.framwork; /** * 工厂类,生产产品 * @author Vatana */ public abstract class Factory { public final Product create(String name){ Product p = createProduct(name); register(p); return p; } abstract protected Product createProduct(String name); abstract protected void register(Product p); } 

     

    package com.vatana.factory.framwork; /** * 产品类,有一个使用方法 * @author Vatana */ public abstract class Product { public abstract void use(); } 

    package com.vatana.factory.idcard; import com.vatana.factory.framwork.Product; /** * 产品的具体实现 * @author Vatana */ public class IDCard extends Product{ int id; public int getId() { return id; } public void setId(int id) { this.id = id; } String owner; IDCard(String owner){ this.owner = owner; System.out.println("建立"+owner+"的卡。"); } //重载使用方法 @Override public void use() { System.out.println("使用:"+toString()); } public String getOwner() { return owner; } @Override public String toString() { return "IDCard{" + "id=" + id + ", owner=" + owner + '}'; } } 

    package com.vatana.factory.idcard; import com.vatana.factory.framwork.Product; import com.vatana.factory.framwork.Factory; import java.util.Vector; /** * ID卡工厂 * @author Vatana */ public class IDCardFactory extends Factory{ private final Vector<Product> owners = new Vector<Product>(); private static int id=0; public Vector<Product> getOwners() { return owners; } @Override protected Product createProduct(String name) { IDCard idCard = new IDCard(name); idCard.setId(++id); return idCard; } @Override protected void register(Product p) { owners.add(p); } }  

     

    package com.vatana.factory; import com.vatana.factory.document.DocumentFactory; import com.vatana.factory.idcard.IDCardFactory; import com.vatana.factory.framwork.Product; import com.vatana.factory.framwork.Factory; /** * * @author Vatana */ public class Test { public static void main(String[] a) { Factory factory = new IDCardFactory(); Product p1 = factory.create("Vatana"); Product p2 = factory.create("Harry"); p1.use(); p2.use(); } }

     

    工厂模式很好用,你会发现在很多地方都会用到,他的好处是能够记录所有工厂生产的产品,一旦创建永不消失,什么时候想要使用,检查,召回,修理都能找到。试想,一个商店卖出一个东西后如果不做记录,如果客户要求退货怎么办,它怎么指出说:你这个东西不是我们卖给你的。

    用在程序设计里也有讲究:所有的虚拟产品 Product,Factory是放在框架中的,它与实际产品完全脱离,这样就方便实际开发人员理解设计者的意图,这里先不管是否要增减产品细节,只要知道,产品应该有哪些内容(属性、方法),工厂应该制造什么产品,那么实际产品,和实际工厂的实现就很明了了。

     


    最新回复(0)