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

目录
相关文章
|
9月前
|
Shell Linux API
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
330 0
|
开发框架 Dart 前端开发
从零到应用:我的Flutter项目开发之旅
Flutter是一种流行的跨平台移动应用开发框架,由Google推出。它使用Dart编程语言,通过单一代码库可以同时构建iOS和Android应用。Flutter具有许多吸引力的特性,如快速的渲染性能、漂亮的用户界面、丰富的组件库以及热重载等。通过阅读这篇文章,你将获得一些关于Flutter项目开发的实际指导,可以帮助你更有效地构建高质量的移动应用程序。无论你是初学者还是有一定经验的开发者,希望这些笔记能够为你提供一些有用的思路和技巧,让你在Flutter项目开发中取得更好的成果。
|
5月前
|
存储 物联网 API
API在实际有什么运用?
API(Application Programming Interface,应用程序接口)是一组定义、协议和工具的集合,用于建立软件与软件之间的互操作性。它允许开发人员使用预先定义的方法来请求服务、访问数据或执行特定功能,而无需了解底层代码的具体实现。在现代软件开发中,API扮演着至关重要的角色,从简单的网页应用到复杂的企业系统,都离不开API的支持。
431 1
|
9月前
|
存储 安全 Java
基于SpringBoot的物业管理系统
基于SpringBoot的物业管理系统
|
9月前
|
NoSQL C++ 开发者
【C/C++ 调试 GDB指南 】GDB中的‘info’命令:一次全面的探索
【C/C++ 调试 GDB指南 】GDB中的‘info’命令:一次全面的探索
464 0
|
设计模式 Java 关系型数据库
软件设计原则-开闭原则讲解以及代码示例
开闭原则(Open-Closed Principle,OCP)是面向对象设计中的一条重要原则,它由Bertrand Meyer在其著作《面向对象软件构造》中提出,并成为SOLID原则之一。 开闭原则的核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。简单来说,就是在不修改已有代码的情况下,通过扩展来实现新的功能或变化。
537 0
|
SQL 数据库
mybatisPlus之逻辑删除解读
mybatisPlus之逻辑删除解读
|
存储 SQL 数据可视化
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
648 2
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
|
Java 数据库连接 mybatis
Cause: java.lang.IndexOutOfBoundsException: Index: 5, Size: 5【已解决】
Cause: java.lang.IndexOutOfBoundsException: Index: 5, Size: 5【已解决】
Cause: java.lang.IndexOutOfBoundsException: Index: 5, Size: 5【已解决】

热门文章

最新文章