重构——68以继承取代委托(Replace Delegation with Inheritance)

以继承取代委托(Replace Delegation with Inheritance)

你在两个类之间使用委托关系,并经常为整个接口编写许多极简单的委托关系;让委托类继承受托类

一、动机

需要受托类中的所有函数

二、做法

1、让委托端成为受托端的一个子类

2、编译

3、将受托字段设为该字段所处对象本身

4、去掉简单的委托函数

5、编译并测试

6、将所有其它涉及委托关系的代码,改为调用对象自身

7、移除受托字段

时间: 2024-10-22 14:15:45

重构——68以继承取代委托(Replace Delegation with Inheritance)的相关文章

代码重构(五):继承关系重构规则

陆陆续续的发表了多篇关于重构的文章了,还是那句话,重构是一个项目迭代开发中必不可少的一个阶段.其实重构伴随着你的项目的整个阶段.在前几篇关于重构的文章中我们谈到了函数的重构.类的重构.数据的重构以及条件表达式的重构,那么今天咱们就来聊聊继承关系的重构.当然还是延续前几篇博客的风格,我们在博客中的代码实例依然使用Swift语言来实现,当然还是那句话,使用什么语言无所谓,关键是看重构的场景以及重构的思想. "重构"不仅仅可以改善你既有的代码设计,还可以改变你组织代码的思路,使你的程序在设计

[WCF权限控制]模拟(Impersonation)与委托(Delegation)[上篇]

由于服务操作是在寄宿进程中执行,在默认的情况下,服务操作是否具有足够的权限访问某个资源(比如文件)决定于执行寄宿进程Windows帐号的权限设置,而与作为客户端的Windows帐号无关.在有多情况下,我们希望服务操作执行在基于客户端的安全上下文中执行,以解决执行服务进行的帐号权限不足的问题.这就涉及到一个重要的话题--模拟(Impersonation)与委托(Delegation)[实例程序源代码从这里下载] 目录: 一.从访问令牌(Access Token)说起 二.再谈WindowsIden

重构——4以查询取代临时变量(Replace Temp with Query)

以查询取代临时变量(Replace Temp with Query) 你的程序以一个临时变量保存某一个表达式的结果.将这个表达式提炼到一个独立函数中,将这个临时变量所有的引用点替换为对新函数的调用,此后,新函数就可以被其他函数使用 一.动机 临时变量是暂时的,只能在所属函数中使用 二.做法 1.找出只被赋值一次的临时变量 2.将该临时变量声明为final 3.编译 4.将"对该临时变量赋值"之语句的等号右侧部分提炼到一个独立函数中.首先将函数声明为"private"

重构——22以对象取代数组(Replace Array with Object)

以对象取代数组(Replace Array with Object) 你有一个数组,其中的元素各自代表不同的东西:以对象替换数组.对于数组中的每个元素,以一个字段来表示 一.动机 数组应该只用于"以某种顺序容纳一组相似对象" 二.做法 1.新建一个类表示数组所拥有的信息,并在其中以一个public字段保存原先的数组 2.修改数组的所有用户,让它们改用新类的实例 3.编译,测试 4.逐一为数组元素添加取值/设值函数.根据元素的用途,为这些访问函数命名.修改客户端代码,让它们通过访问函数取

重构——26以字面常量取代魔法数(Replace Magic Number with Symbolic Constant)

以字面常量取代魔法数(Replace Magic Number with Symbolic Constant) 你有一个字面数值,带有特别含义:创造一个常量,根据其意义为它命名,并将上述的字面数值替换为这个常量 一.动机 在计算机科学中,魔法数使历史最悠久的不良现象之一 二.做法 1.声明一个常量,令其值为原本的魔法数值 2.找出这个魔法数的所有引用点 3.检查是否可以使用这个新声明的常量来替换该魔法数.如果可以,便以此常量替换之 4.编译 5.所有魔法数都被替换完毕后,编译并测试.此时整个程序

重构——33以字段取代子类(Replace Subclass with Fields)

以字段取代子类(Replace Subclass with Fields) 你的各个子类的唯一差别只在"返回常量数据"的函数上:修改这些函数,使他们返回超类的某个新增字段,然后销毁子类 一.动机 1.建立子类的目的,是为了增加新特性或变化其行为 2.子类中只有常量函数,实在没有足够的存在价值 二.做法 1.对所有子类使用Replace Constructor with Factory Method 2.如果有任何代码直接引用子类,令它改而引用超类 3.针对每个常量函数,在超类中声明一个

重构——31以子类取代类型码(Replace Type Code with SubClass)

以子类取代类型码(Replace Type Code with SubClass) 你有一个不可变的类型码,它会影响类的行为:以子类取代这个类型码 一.动机 1.借助多态来处理变化行为,标志就是switch if-then-else 2.把对不同类行为的了解从类用户那儿转移到了类自身 二.做法 1.使用Self Encapsulate Field将类型码自我封装起来 2.为类型码的每一个数值建立一个相应的子类.在每个子类中覆写类型码的取值函数,使其返回相应的类型码值 3.每建立一个新的子类,编译

重构——49以函数取代参数(Replace Parameter with Methods)

以函数取代参数(Replace Parameter with Methods) 对象调用某个参数,并将结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数:让参数接受者去除该项参数,并直接调用前一个参数 一.动机 如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值 二.做法 1.如果有必要,将参数的计算过程提炼到一个独立的函数中 2.将函数本体内引用该参数的地方改为调用新建的函数 3.每次替换后,编译并测试 4.全部替换完成后,使用Remove Parame

重构——56以测试取代异常(Replace Exception with Test)

以测试取代异常(Replace Exception with Test) 面对一个调用者可以预先检查的条件,你抛出了一个异常:修改调用者,使它在调用函数之前先做检查 一.动机 异常只应该被用于异常的,罕见的行为,也就是那些产生意料之外错误的行为,而不应该成为条件检查的替代品 二.做法 1.在函数调用点之前,放置一个测试语句,将函数内catch区段中的代码复制到测试句的适当的if分支中 2.在catch区段起始处加入一个断言,确保catch区段绝对不会被执行 3.编译,测试 4.移除所有的catc