设计模式-抽象工厂模式详解
2017-07-25 17:51
302 查看
上一篇讲到的工厂模式,类的创建依赖工厂类,比如我新添加一种铅笔的对象类,那么就必须在工厂类里面添加对应的方法,这样就违背了设计模式的闭包原则,所以从设计角度考虑,会有一定的问题。所以,我们就可以用抽象工厂模式,比如之前的例子,我们新增一个接口,里面实现一个创建笔的方法,返回值为Writer对象,然后为每个种类的笔的对象都创建一个工厂类,实现这个接口,这样我们新增笔的种类的时候,只需要新增该类的实现类,和该对象的工厂类即可,不需要修改工厂类,这样就符合了闭包原则。
我们来看例子:
所有种类笔对象都必须实现的接口类:
provider接口类(统一创建笔的对象接口):
这样做好处在于,比如你想添加一种铅笔,只需要做一个实现Writer接口的实现类,然后再做一个工厂类实现Provider接口即可,不用修改之前的代码,这样做,代码扩展性较好。
抽象工厂类的误区:虽然叫抽象工厂类,但是其中并没有抽象方法,网上有些教程把类设计成抽象类,其实并不是抽象工厂模式,抽象模式的英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译过来就是提供一个用于创建相关或依赖对象的家族的接口,而无需指定具体的类,所以抽象工厂模式上层一定是接口,并且接口里面可以添加多个产品类,比如上面的Provider接口类,我们可以添加其他产品类,然后类似上面,添加对应的实现类和工厂类即可。
我们来看例子:
所有种类笔对象都必须实现的接口类:
public interface Writer { public void write(); }两个实现类:
public class GangBi implements Writer { @Override public void write() { // to do something } }
public class MaoBi implements Writer { @Override public void write() { // to do something } }两个工厂类:
public class GangBiFactory implements Provider { @Override public Writer produceBi() { return new GangBi(); } }
public class MaoBiFactory implements Provider { @Override public Writer produceBi() { return new MaoBi(); } }
provider接口类(统一创建笔的对象接口):
public interface Provider { public Writer produceBi(); }测试类:
public class FactoryTest { public static void main(String[] args) { Provider provider = new GangBiFactory(); Writer writer = provider.produceBi(); writer.write(); } }
这样做好处在于,比如你想添加一种铅笔,只需要做一个实现Writer接口的实现类,然后再做一个工厂类实现Provider接口即可,不用修改之前的代码,这样做,代码扩展性较好。
抽象工厂类的误区:虽然叫抽象工厂类,但是其中并没有抽象方法,网上有些教程把类设计成抽象类,其实并不是抽象工厂模式,抽象模式的英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译过来就是提供一个用于创建相关或依赖对象的家族的接口,而无需指定具体的类,所以抽象工厂模式上层一定是接口,并且接口里面可以添加多个产品类,比如上面的Provider接口类,我们可以添加其他产品类,然后类似上面,添加对应的实现类和工厂类即可。
相关文章推荐
- Java研究之学习设计模式-抽象工厂模式详解
- 详解C#的设计模式编程之抽象工厂模式的应用
- Java 设计模式之抽象工厂模式的详解(创建模式)
- 详解设计模式——抽象工厂模式
- 设计模式-工厂模式详解(非抽象工厂模式)
- Java设计模式之抽象工厂模式实例详解
- 设计模式(一)简单工厂模式工厂模式 抽象工厂模式详解
- [设计模式] - No.1 详解简单工厂模式、工厂模式和抽象工厂模式
- PHP实现设计模式中的抽象工厂模式详解
- PHP实现设计模式中的抽象工厂模式详解
- 设计模式——抽象工厂模式详解
- 设计模式(3)-抽象工厂模式详解(易懂)
- 设计模式——抽象工厂模式详解
- [置顶] 【设计模式】之抽象工厂模式详解与应用(三)
- 设计模式详解之抽象工厂模式
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
- 详解iOS应用开发中使用设计模式中的抽象工厂模式
- Java 23种设计模式之抽象工厂模式详解
- Java 可复用的面向对象的设计模式之 工厂模式Factory详解 :简单工厂模式 工厂方法模式 抽象工厂模式
- 设计模式之禅—23种设计模式详解_3 抽象工厂模式