《设计模式解析》摘录(16)

Factory Method 模式

关键特征:

    意图:定义一个用于创建对象的接口,让子类决定实例哪一个类。将实例化推迟到子类。

    问题: 一个类需要实例化另一个类的派生类,但不知道是哪一个。Factory Method 允许派生类进行决策。

    解决方案:派生类对实例化哪个类和如何实例化做出决策。

    参与者与协作者:Product 是工厂方法所创建的对象类型的接口。Creater 是定义工厂方法的接口。

    效果:客户将需要派生Creator,以创建一个特定的 ConcreteProduct 对象。

    实现:在抽象类中使用一个抽象方法。需要实例化一个被包含对象的时候抽象类的代码将引用此方法,但是不知道需要的对象是哪一个。

工厂模式的总结:

    创建和使用对象的三个主要任务:

    1、根据所履行的责任找出对象。这时共性和可变形分析极为有用。

    2、决定如何使用这些对象。主要是考虑对象间的关系,这正是许多模式所要解决的问题。

    3、决定如何管理这些对象。这正是工厂的用武之地。

    设计应用程序时可以使用另外一组视角:使用视角和创建/管理视角。

    概念上相似的对象从使用的视角来看,可以以同样的方式处理。然而,创建对象时,负责创建的实体通常需要了解要创建的是哪一个具体对象,以及何时创建这个而非那个对象的规则。在设计系统时,让最复杂的部分在概念层次使用其他对象是最有用的。这意味着要遵循开闭原则、依赖倒置原则和 Liskov 替换原则。但是,要实现所有这些,使用对象就不应该知道所用的是哪一个特选对象,因此,需要有对象来负责此事——工厂就出现了。

    称工厂为“对象管理者”可能更合适,因为创建对象只是它们的责任之一。通过封装对象的创建和其后的管理,更复杂的使用对象就无需处理这些问题了。这意味着出现新功能的需要时,可以在已有系统的背景下处理,开放出新功能。如果概念上还没有它的位置,那就在系统中重构出一个,然后在添加新代码。

    重构可以用来修改劣质代码或者作为扩展优秀代码的方式。使用重构来添加新功能的正确过程如下:

    1、重构已有代码,以配合新代码。(没有增加任何新功能)也就是说,对于关注区域中不符合开闭原则的代码,要重构使其符合。

    2、然后加入新功能。

    在工厂的背景下,这意味着要编写系统:使用对象不知道它使用哪个特定的实现。如果什么地方不符合,而且完成该功能的方法不止一种,那就重构代码达到这一点。完成以后,添加新功能就只需要编写出来,修改负责这些类型对象的工厂对象。

    这种方法的优点在于,它对于各种尺度的系统都行之有效。在开始,我们的选择很少,工厂可能是类自己的封装了构造操作的方法。接下来,随着系统越来越复杂,我们可能编写专门的工厂对象,在其中写入正在讨论的规则。最终,可能需要使用数据库或者配置表体现规则。

    工厂逻辑都是封装在方法和对象之后的,从而将这些规则与使用方软体分离。如果逻辑变得非常负责,它与系统仍然是松耦合的,可以保持灵活性和易扩展性。

    软件中总是会发生变化。无论何种变化都或者会影响对象、服务的用户,或者影响实例化对象的工厂。保持分离,就减少了维护工作量,只需维护这些实体中的某一个,很少会是两者。

    这又归结到一个基本原则,对于系统中的任意两个实体A和B,应该将它们之间的关系限制为A使用B,或者A创建B,但是两种关系永远不要同时存在!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值