Software_programming_bk_Ref&DP

2019-11-22


 

1 Creation 

创建对象的 构造函数复杂时, 先考虑 extract cls, extract subCls.

1) Creation Method  

使用静态或非静态的方法替换 new 创建对象,

extract Method public, static 提取 new cls() ;

move method 搬移函数至宿主类

改变调用的形式

与Factory Method 的区别, Factory M 至少一个超类,一个子类,且能够 Polymorphsim 多态构建。

2)link constructure

catch-all constructure

互相调用 return this( )

 

 

 creation method

 



2019-11-24  10:35:33

Chapter 6 creation ,  Factory method 

解决了 创建方案蔓延,  且可以减少 入参。

fac  inner class,  如果一个类的职责萎缩,可合并到其他类中,使用 move field, move method.  修改引用。 

该重构 解决了 创建方案蔓延的痛点,对象的创建过程散落在程序的各地,拼凑。

1.  extract class, extract method 均无效的情况下,使用 create method 创建对象,更新客户代码的引用。

2. 将散落的各地创建步骤聚集到 factory 中,遇到客户代码无法访问到的情况,将外部承载类中,创建的部分,采用

   extract class 方法。

3. 将该类与之前的 Factory 合并。

 



2019-12-01 13:09:26

6.3 用 Factory 封装类

直接实例化处在同一包结构中,实现同一接口的多个类。

把具体的子类的构造函数声明为非公开的,protected, 并通过 Factory 来创建它们的实例。

注意:只要客户代码需要确切知道一些类的存在,直接实例化这些类的能力对它来说就是有用的。

如果客户代码不需要这样的知识,如果这些类都处在同一个包结构中,都实现同一个接口,而且它们不太会发生改变,

此时用一个 Factory 就可以把这些处在统一包结构中的类与包结构之外的客户代码隔离起来,

只需赋予这个Factory创建和返回实现了统一结构的类的实例的能力即可。

 

确保客户代码使用类的通用接口与类交互,提供了一种严格执行“面向接口编程,而不是面向实现”

其次,隐藏那些不需要被包结构外部公共可见的类,减少了一个包结构的“概念重量”, conceptual weight。

简化了不同种类实例的创建。

 

 

 

 

 

 

 

 

 

 

 



2019-12-02

Factory Method

为了形成一个 Factory Method 【DP】 模式,需要如下事物:

  • 用来标识Factory Method实现者可能实例化并返回的类集合的类型( 由接口,抽象类或类定义)
  • 实现这一类型的类集合
  • 实现 Factory Method 的类,它们在本地决定实例化,初始化并返回哪些类

Factory Method是面向对象编程中最常用的模式,因为它们提供了多态创建对象的方法。

Factory Method 通常在一个类层次中实现,虽然它们也可以由仅共享一个通用接口的类实现。

通用情形是,一个抽象类要么声明一个Factory Method并强制子类重写它,要么实现一个默认的 Factory Method并允许

子类继承或重写这个默认实现。

Factory method 通常设计在框架类中,扩展一般通过定义框架类的子类并重写 Factory Method来实现,重写后的

Factory Method 返回一个特定的对象。

 

缺点 : Factory Method 的签名与其所有实现者必须一致,所以可能不得不为一些实现者传入其并不需要的参数。代码读起来

会让人糊涂。

Factory Method 经常会被 Template Method 【DP】调用,为了摆脱类层次中的重复代码而进行的重构常常

会产生这两个模式的写作。

例如: 找到这样一个方法,或者声明在超类中并被子类重写,或者定义在几个子类中,且除了创建对象的步骤,

这个方法的实现几乎一模一样。

倘若 Template Method 能够发出创建对象的调用而无需知道超类和(子)类将要实例化,初始化和返回的对象的类型,

就能知道如何把所有版本的方法替换成一个具有单独超类的 Template Method. 完成该任务,最合适的是 Factory Method

 

+ 减少因创建自定义对象而产生的重复代码

+有效地表达了对象创建发生的位置,以及如何重写对象的创建

+强制 Factory Method 使用得嘞必须实现统一的类型

- 可能会向 Factory Method 的一些实现者传递不必要的参数。

使用场景:

1. 当兄弟子类实现了除 创建对象步骤外都很相似的方法时。

2. 当超类和子类实现了除对象创建步骤外都很相似的方法时。

==============================================

相似方法: 类层次中除了创建步骤外都很相似的方法称为相似方法.

  1. 在包含相似方法的子类中修改这一方法,以便通过条用实例化方法来完成自定义对象的创建。通常情况:在创建代码上提炼方法或者创建代码改为对已经存在的实例方法的调用可以完成这一步。
  2. 对所有兄弟子类中的相似方法重复1, 会在每个兄弟子类中都生成一个实例化方法,且这些方法签名一致。
  3. 修改兄弟子类的超类,如果不能修改这个超类或者不希望修改它,应用提炼超类。来产生一个继承兄弟子类原超类的新超类,并使兄弟子类继承这个新 超类。兄弟子类的超类的作为参与者的名字是 Factory Method: Creator [DP]
  4. 在相似方法上应用形成 Template Method 重构。引出对 上移方法 的应用。(上移方法:如果你使用强类型语言,且打算上移的方法调用了另一个子类中包含但超类不包含的方法,请为超类声明一个抽象方法。) 实例化方法就是这种需要声明在超类中抽象方法中的一个。现在,实现这一抽象方法的每个子类都成了 Factory Method: ConcreteCreator  [DP]
  5. 如果子类中存在其他的,能够从调用之前产生的工厂方法中获益的相似方法,重复 1-4.
  6. 如果大多数 ConcreteCreator 中的工厂方法都包含相同的实例化代码,上移这些代码,把超类中声明的抽象方法改成具体的工厂方法,并使它执行默认(即大多数情况的)实例化行为。

 

 

 

 

 

 

 

 

 

 

 

 

 



 

posted @ 2019-11-22 10:00  君子之行  阅读(12)  评论(0)    收藏  举报