设计模式-抽象工厂模式详解
来源:互联网 发布:java interface 调用 编辑:程序博客网 时间:2024/06/05 13:30
上一篇讲到的工厂模式,类的创建依赖工厂类,比如我新添加一种铅笔的对象类,那么就必须在工厂类里面添加对应的方法,这样就违背了设计模式的闭包原则,所以从设计角度考虑,会有一定的问题。所以,我们就可以用抽象工厂模式,比如之前的例子,我们新增一个接口,里面实现一个创建笔的方法,返回值为Writer对象,然后为每个种类的笔的对象都创建一个工厂类,实现这个接口,这样我们新增笔的种类的时候,只需要新增该类的实现类,和该对象的工厂类即可,不需要修改工厂类,这样就符合了闭包原则。
我们来看例子:
所有种类笔对象都必须实现的接口类:
public interface Writer {public void write();}两个实现类:
public class GangBi implements Writer {@Overridepublic void write() {// to do something}}
public class MaoBi implements Writer {@Overridepublic void write() {// to do something}}两个工厂类:
public class GangBiFactory implements Provider {@Overridepublic Writer produceBi() {return new GangBi();}}
public class MaoBiFactory implements Provider {@Overridepublic 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接口类,我们可以添加其他产品类,然后类似上面,添加对应的实现类和工厂类即可。
阅读全文
0 0
- 设计模式详解之抽象工厂模式
- 设计模式详解之抽象工厂模式
- 设计模式-抽象工厂模式详解
- 设计模式-工厂模式详解(非抽象工厂模式)
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 《自己手动写一个编译器、连接器》二(2)
- 素数打表法
- [转] ThreadLocal 的原理与用途
- 在Windows上安装GPU版Tensorflow
- hql-udf方法
- 设计模式-抽象工厂模式详解
- android控件之datePickDialog
- 07. JSP 处理XML
- 数据库Read Commit小记
- i2c设置地址计算
- springboot搭建
- 整数,浮点数在内存中的存储
- 文章标题
- MySQL 的逻辑架构指的是sql layer?