1、前言java
前面咱们说过模板方法被用在了工厂方法里面,为何呢?工厂是制造产品的,须要按照必定的流程去创造产品,所以这必定的流程创造产品就是咱们的模板了。工厂方法能够说用的不少,在咱们的第一个设计模式,迭代器里面,咱们其实就用到过,只不过咱们不知道而已,下面咱们先看一下工厂方法的本质,而后再逐一分析。设计模式
2、代码ide
package designMode.factory; public abstract class Factory { public abstract Product createProduct(String owner); public abstract void registerProduct(Product p); public abstract void getAllProductOwner(); public Product create(String owner){ Product p = createProduct(owner); registerProduct(p); return p; } }
package designMode.factory; import java.util.ArrayList; import java.util.List; public class IDCardFactory extends Factory { List owners = new ArrayList(); public Product createProduct(String owner){ System.out.println("为 "+owner+" 创造产品成功..."); return new IDCardProduct(owner); } @Override public void registerProduct(Product p) { String owner=((IDCardProduct)p).getOwner(); owners.add(owner); System.out.println("注册 "+owner+" 的产品成功..."); } @Override public void getAllProductOwner() { for(int i=0;i<owners.size();i++){ System.out.println("产品用户:"+owners.get(i)); } } }
package designMode.factory; public abstract class Product { public abstract void use(); }
package designMode.factory; public class IDCardProduct extends Product { String owner; public IDCardProduct(String owner) { this.owner = owner; } @Override public void use() { System.out.println("用户 "+owner+" 正在使用产品..."); } public String getOwner() { return owner; } }
package designMode.factory; public class FactoryMain { public static void main(String[] args) { Factory f = new IDCardFactory(); Product p=f.create("江疏影"); p.use(); System.out.println("--------------------"); p=f.create("邱淑贞"); p.use(); System.out.println("--------------------"); f.getAllProductOwner(); } }
至此咱们能够看到在工厂抽象类里面定义了创造产品和注册产品,而后在实现类里面真的进行创造和注册产品。函数
对于抽象类,必须有构造函数,由于子类的初始化须要先调用抽象类的构造函数,而后是子类的构造函数;可是抽象类的构造函数不能定义成抽象的,由于若是这样的话,将不能被实现,所以没有抽象的构造函数。学习
3、总结this
工厂模式使用了继承、接口、抽象等机制,和以前写的迭代器模式、模板模式都是同样的,能够看出设计模式并非独立的,而是相互之间有关系和区别的,在学习的时候咱们要善于总结设计模式之间的共同之处和不一样之处,活学活用,才能在之后的大型项目中选择正确的开发方式,事半功倍。spa
浅谈设计模式<最通俗易懂的讲解>.net