《重构》中有点不清楚的两个手法

感觉“以子类取代型别码”和“值域取代子类”应该是一个互为逆向的重构手法,不过书中没有这么说,所以只能瞎猜了,盼高人拍砖指正。

下面是本人总结的两类手法的对比:


以子类取代型别码 Replace Type Code with Subclasses

源类情况:私有成员保存型别码
          构造函数中指定型别码以创建相应对象
重构结果:无需保存型别码
          子类根据工厂函数指定的型别码而创建
          子类有函数返回硬编码的型别码
          父类提供一个用于返回硬编码的型别码的抽像函数
          各子类实现返回硬编码型别码的抽像函数返回的硬编码常量值不同

 

以值域取代子类 Replace Subclasses with Fields

源类情况:子类返回硬编码的常量值(其实也是型别码)
          父类提供抽像函数
          各子类的唯一差别只是返回常量值不同
重构结果:在父类中保存的常量值(其实也是型别码)
          子类被全部删除
          父类中提供以子类名字命名的工厂函数
          工厂函数可以创建保存了旧子类常量(型别码)的对象(根据型别码对应原来的子类)

 

感觉示例只是一个声明了型别码的静态变量,另一个直接硬编码而已,没其它区别,而且重构结果直接硬编码的工厂函数,也可以重构为“声明型别码的静态变量”,感觉真是一样了。

posted @ 2010-09-25 10:38  -仁者-  阅读(200)  评论(0编辑  收藏  举报