对象内转移特性(Moving Features Between Objects)

1.Move Method

  • 有个函数与其所驻CLASS之外的另一个CLASS进行更多交流,调用后者,或被后者调用。
  • 如果SOME CLASS 的 SUBCLASS和SUPERCLASS出现其他声明,无法进行搬移,除非TARGET CLASS也同样表现出多态性
  • 将SOURCE METHOD使之成为一个DELEGATING METHOD
  • 需要使用SOURCE CLASS特性,四种选择:
    • 将这个特性也移到TARGET CLASS
    • 建立或使用一个从TARGET CLASS到SOURCE的引用关系
    • 将SOURCE OBJECT当作参数传给TARGET METHOD
    • 如果所需特性是个变量,将它当作参数传给TARGET METHOD

2.Move Fied

  • 某个FIED被其所驻CLASS之外的另一个CLASS更多的使用
  • 用SELF-ENCAPSULATION对SOURCE CLASS的FIED的进行封装
  • 值域移到其他函数,需要考虑相关的引用也要一起移动

3. Extract Class

  •  建立一个新CLASS,将相关的值域和函数从旧CLASS搬移到新CLASS.
  •  一个有用的测试:如果你搬移了某些值域或函数,会发生什么事?其他值域和函数是否因此变得无意义?
  •  是改善并发程序的一种常用技术,因为它使你可以为提炼后的两个CLASS分别加锁。
  •  这种方法常见与CLASS的分离,功能特性的提炼,使功能更单一,细粒度增加

4. Inline Class

  • 将CLASS的所有特性搬移到另一个CLASS中,然后移除原CLASS。
  • 功能的合并,便于处理,去掉不必要的细粒度。

5. Hide Delegate

  • 在SERVER端放置一个简单的委托函数,将委托关系隐藏起来,从而去除这种依存性。

6. Remove Middle Man

  • 与Hide Delegate 相反

7. Introduce Foreign Method

  • 在CLIENT CLASS中建立一个函数,并以一个SERVER CLASS 实体作为第一引数。
  • 在CLIENT端增加额外的功能,这种情况用于增加功能少,与SERVER端对象性关联性小。

8. Introduce Local Extension

  • OOP中的扩展性的应用
  • 建立一个新CLASS,使它包含这些额外函数,让这个扩展品成为SOURCE CLASS的SUBCLASS或者WRAPPER
  • 首选SUBCLASS,SUBCLASSING迫使必须产生一个SUBCLASS对象,这种情况下如果有其他对象引用了旧对象,我们就同时有了两个对象保存了原数据。如果原数据是不可修改的,那也没问题。但如果原数据是允许被修改的,一个修改动作无法同时改变两个拷贝,这时候必须改用WRAPPER。

 

 

 

你可能感兴趣的:(oop)