代码重构之三种取代类型码(类、子类、状态对象或策略对象)的方式辨析
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
代码重构之三种取代类型码(类、子类、状态对象或策略对象)的方式辨析相关推荐
- Replace Type Code with State/Strategy(以State/Strategy取代类型码)
有一个类型码,它会影响类的行为,但你无法通过继承消除它 public class Employee {static final int ENGINNER = 0;static final int SA ...
- Replace Type Code with Subclasses(以子类取代类型码)
有一个不可变的类型码,它会影响类的行为 public class Employee {static final int ENGINNER = 0;static final int SALESMAN = ...
- 3.14 以子类取代类型码
[1]原代码 1 class Employee 2 { 3 public: 4 const static int ENGINEER = 0; 5 const static int SALESMAN = ...
- 重构——30以类取代类型码(Replace Type Code with Class)
以类取代类型码(Replace Type Code with Class) 类之中有一个数值类型码,但它并不影响类的行为:以一个新的类替换该数值类型码 一.动机 让编译器可以进行类型检查,减少bug ...
- springboot整合elasticJob实战(纯代码开发三种任务类型用法)以及分片系统,事件追踪详解...
一 springboot整合 介绍就不多说了,只有这个框架是当当网开源的,支持分布式调度,分布式系统中非常合适(两个服务同时跑不会重复,并且可灵活配置分开分批处理数据,贼方便)! 这里主要还是用到zo ...
- 代码重构的常用方法(C++实现)
代码重构的常用方法 (C++实现) 重构是在软件开发中改善已有代码的一种方法,通过代码重构可以改进软件的设计.使得软件更容易理解.有利于Bug的发现以及提高后续开发效率.Martin Fowler在& ...
- 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)
膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...
- JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)
Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...
- java代码重构的思路Java代码重构的几种模式
Java代码重构的几种模式 Java代码的重构模式主要有三种:重命名方法重构模式.引入解释性变量重构模式.以查询取代临时变量重构模式重命名方法重构模式建议执行如下的步骤来完成:1.建立一个具有新名称的 ...
最新文章
- VSTO之旅系列(一):VSTO入门
- 【jQuery】用jQuery给文本框添加只读属性【readOnly】
- wpf window 不执行show 就不能load执行_关于机器学习中的Scikit-Learn,你不知道的10个实用功能...
- 自动机器学习工具全景图:精选22种框架,解放炼丹师
- WAMP安装curl扩展并发起https请求
- Qt 2D绘图之一:基本图形绘制和渐变填充
- 203.移除链表元素
- thinkphp tp 框架如何查看版本
- H265播放器EasyPlayer测试demo停顿后实现自动重连的优化分享
- (转)常见数学符号及公式英文发音大全
- 2021年1月北京限号轮换时间规定来了,怎么设置每天提醒限行?
- deeplinux 热点_在deepin linux系统中连接无线的同时开启热点(即网络共享)的步骤
- vue 组件通信合集
- 【软考 系统架构设计师】嵌入式系统⑤ 嵌入式系统开发与设计
- spring MVC从零开始
- 微信小程序 data命名不能大写
- 腾讯云仪征数据中心开服,辐射长三角产业数字化升级
- 店宝宝谈男士护肤美妆:千亿风口,巨头争锋
- 植物大战僵尸英文原版
- Navicat设置表的外键