模式之--工厂方法(Factory Method)未完

行为目的:

为需要创建的一个对象创建接口,让子类决定具体实例化那个类。工厂方法把实例化延缓到子类实现。

问题起源:

假设有这么一个应用框架,用于管理系统文档。文档包含各式各样的类型,不同的类型定义为不同的文档,但是它们依旧拥有相同的操作过程,打开,读,写,关闭等。基于面向接口的设计,在管理文档的类中我们不要求知道具体要操作的是什么类型的文档,而只需知道什么时候去创建它。管理文档的类只包含文档类的接口,而接口是不能实例化的。工厂方法就是来解决这个问题的,应用程序无需知道具体的文档类型,实现应用程序与文档类型之间的解耦。应用程序只需通过工厂方法类即返回想要的文档类实例。

使用情况:

1)应用类对于要创建的具体类处于未知的状态;
2)类希望子类去实现类的创建,工厂接口与工厂实现类;
3)代理类有多个辅助型子类,在使用时需要实例化详细的子类。

UML结构框图:

UML框图说明:

使用说明:

构建器依靠子类返回具体的产品类实例。

模式优缺点:

工厂方法隐藏了具体产品类实现,直接面向于产品类接口,实现工厂类与具体产品类之间的解耦。
缺点是工厂方法需要为创建产品专门提供相应的产品接口和工厂类,与抽象工厂类似,抽象接口定义的方法很难去扩展。
1)工厂方法接口为工厂实现类提供备用接口实现。在工厂方法内部创建产品类相比之间创建非常灵活,工厂方法对于拓展的产品类提供了非常容易的扩展实现。
2)为并行层次产品类提供了很好的关联实现。对于工厂方法接口,可以实现多个不同的工厂方法实现类。不同的工厂方法实现类针对不同的产品类生成。比如在Ui界面制作过程中,对于line和text内容的绘制结果是不同的,line竖向占位较少,而text通常需要切换到新行进行绘制,然而他们都是属于界面绘制的类型。针对line和text,设计不同的工厂方法类很容易解决二者之间的区别问题。

实现细节:

1)工厂方法中,工厂抽象类是可选择实现的,请根据实际需要决定。
2)参数工厂方法,根据不同的参数,返回不同的产品类。
3)通过设计模板工厂方法类,避免实现其子类。

示例代码:

Java类库中的使用:

关联模式:

工厂方法通常与抽象工厂,模板方法配合使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值