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

简介: 以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、调整源类中为类型码设值的函数,将一个恰当的状态对象子类赋值给“保存状态对象”的那个字段

目录
相关文章
|
4月前
|
Dart 开发工具
解决升级Flutter3.0后出现警告Operand of null-aware operation ‘!‘ has type ‘WidgetsBinding‘ which excludes null
解决升级Flutter3.0后出现警告Operand of null-aware operation ‘!‘ has type ‘WidgetsBinding‘ which excludes null
38 1
|
4月前
|
存储
【Azure 应用服务】Storage Queue触发Azure Function时报错 The input is not a valid Base-64 string
【Azure 应用服务】Storage Queue触发Azure Function时报错 The input is not a valid Base-64 string
|
机器学习/深度学习 自然语言处理 算法
TABs(Type Abstraction,类型抽象):Open Relation and Event Type Discovery with Type Abstraction论文解读
传统的“封闭世界”信息提取(IE)方法依赖于人类本体来定义抽取范围。因此,当应用到新的领域时,这种方法就不适用了。这就要求系统能够从给定的语料库中自动推断出新的类型
65 0
Flutter的setState的使用注意事项以及报错The method ‘setState‘ isn‘t defined for the type
Flutter的setState的使用注意事项以及报错The method ‘setState‘ isn‘t defined for the type
|
Java 数据库
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
203 0
重构——29以数据类取代记录(Replace Record with Data Class)
以数据类取代记录(Replace Record with Data Class):你需要面对传统编程环境中的记录结构;为该记录创建一个“哑”数据对象
1562 0
SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-
SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-
SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-
SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
重构——47以明确函数取代参数(Replace Parameter with Explicit Methods)
以明确函数取代参数(Replace Parameter with Explicit Methods):你有一个函数,其中完全取决于参数值而采取不同的行为;针对该参数的每一个可用值,建立一个独立函数
1866 0
|
编译器
重构——30以类取代类型码(Replace Type Code with Class)
以类取代类型码(Replace Type Code with Class):类之中有一个数值类型码,但它并不影响类的行为;以一个新的类替换该数值类型码
1393 0