重构——32以State/Strategy取代类型码(Replace Type Code with State/Strategy)

以State/Strategy取代类型码(Replace Type Code with State/Strategy)

你有一个类型码,它会影响到类的行为,但是你无法通过继承手法消除它;以状态对象取代类型码

一、动机

本项重构与Replace Type Code with Subclass很相似,但如果“类型码的值在对象生命期中发生变化”或“其他原因使得宿主类不能被继承”,你可以使用本重构,本重构使用State模式或者Strategy模式

二、做法

1、使用Self Encapsulate Field将类型码自我封装起来

2、新建一个类,根据类型码的用途为它命名。这就是一个状态对象

3、为这个新类添加子类,每个子类对应一种类型码

4、在超类中建立一个抽象的查询函数,用以返回类型码。每个子类中覆盖该函数,返回确切的类型码

5、编译

6、在源类中建立一个字段,用以保存新建的状态对象

7、调整源类中负责查询类型码的函数,将查询动作转发给状态对象

8、调整源类中为类型码设值的函数,将一个恰当的状态对象子类赋值给“保存状态对象”的那个字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值