代码重构之三种取代类型码(类子类状态对象或策略对象)的方式辨析

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码重构之三种取代类型码(类子类状态对象或策略对象)的方式辨析相关的知识,希望对你有一定的参考价值。

1.以类取代类型码
适用情况:类之中有一个数值类型码,但它并不影响类的行为
重构手段:以一个新的类替换该数值类型码。
重构类图示意:
在这里插入图片描述
这里的“不影响类的行为”是什么意思呢?
类型码往往和switch语句一起出现,只有当类型码不会在switch语句中引发行为变化时,才能以类来取代它。或者是根本没有条件语句。

2.以子类取代类型码
适用情况:你有一个不可变的类型码,它会影响类的行为。
重构手段:以类型码的宿主类为基类,并针对每一种类型码各创建一个子类。
重构类图示意:
在这里插入图片描述
Replace Type Code with Subclasses的主要做用实际上是搭建一个舞台,让Replace Conditional with Polymorphism得以一展身手。

3.以State/Strategy取代类型码
适用情况:你有一个类型码,它会影响类的行为,但你无法通过继承手法消除它。
重构手段:以状态对象或者具体策略对象取代类型码。
重构类图示意:
在这里插入图片描述
参考文章:
Replace Type Code with Class (以类取代类型码)
Replace Type Code with Subclasses (以子类取代类型码)
Replace Type Code with State/Strategy

以上是关于代码重构之三种取代类型码(类子类状态对象或策略对象)的方式辨析的主要内容,如果未能解决你的问题,请参考以下文章

面向对象的三大特征之三——多态

重构手法之重新组织数据

面象对象设计6大原则之三:里氏替换原则

Python面向对象学习小结之三 继承

多 态★★★★★(面向对象特征之三)

重构:简化函数调用