重构——14隐藏“委托关系”(Hide Delegate)

隐藏“委托关系”(Hide Delegate)

客户通过一个委托类来调用另一个对象;在服务类上建立客户所需的所有函数,用以隐藏委托关系

一、动机

1、封装意味着每个对象都应该尽量少的了解系统的其它部分,如此一来,一旦发生变化,需要了解这一变化的对象就会比较少--这会使变化容易进行

2、减少对象依赖

二、做法

1、对于每一个委托关系中的函数,在服务对象端建立一个简单的委托函数

2、调整客户,令它只调用服务对象提供的函数

3、每次调整后,编译并测试

4、如果将来不再有任何客户需要取用Delegate,便可移除服务对象中的相关访问函数

5、编译,测试

时间: 2024-10-14 17:11:21

重构——14隐藏“委托关系”(Hide Delegate)的相关文章

重构——52隐藏函数(Hide Method)

隐藏函数(Hide Method) 有一个函数,从来没有被其它任何类用到:将这个函数改为private 一.动机 提高函数可见度容易,降低稍微困难一些 二.做法 1.经常检查有没有可能降低某个函数的可见度 2.尽可能降低所有函数的可见度 3.没完成一组函数的隐藏之后,编译并测试

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

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

C#编程利器之四:委托与事件(Delegate and event) (上)

本文试图在.net Framework环境下,使用C#语言来描述委托.事件的概貌.希望本文能有助于大家理 解委托.事件的概念,理解委托.事件的用途,理解它的C#实现方法,理解委托与事件为我们带来的好处 .C#是一种新的语言,希望大家能通过本文清楚地看到这些,从而可以对委托.事件等技术进行更深入的 理解和探索. 一. 委托 委托的本质 --在C#中,委托是一个特殊的类: --在某种程度上,相当于C++的函数指针: --在某种程度上,相当于接口(Interface): 委托的定义 --关键字:del

C#编程利器之四:委托与事件(Delegate and event) (下)

二.事件 1.了解概念 事件就是当对象或类状态发生改变时,对象或类发出的信息或通知.发出信息的对象或类称为"事件源 ",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者 来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托 来为触发时将调用的方法提供类型安全的封装. 在介绍事件之前我们先来了解几个事件的基本概念和几个重要素: --事件的本质 -事件是特殊的委托实例 -事件关

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

以委托取代继承(Replace Inheritance with Delegation) 1.某个子类只使用了超类接口中的一部分,或是根本不需要继承而来的数据 2.在子类中新建一个字段用以保存超类:调整子类函数,令它改而委托超类:然后去掉两者之间的继承关系 一.动机 超类中的许多操作并不真正适用于子类 二.操作 1.在子类中新建一个字段,使其引用超类的一个实例,并将它初始化为this 2.修改子类内的所有函数,让它们不再使用超类,转而使用上述那个受托字段.每次修改后,编译并测试 3.去除两个类之

重构 对象之间搬移特性

Move Method 如果一个类中的方法与另一个类有很多的交流,那么我们就在另一个类中建立一个有类似功能的新函数,将旧函数变成一个单纯的Delegating Method, 或是将旧函数移除. Move Field  状况:你的class中的field被另一个class更多的用到.那么在另一个class里建立new field,修改旧的field. Extract Class 状况:一个类做了两个类做的事,那么建立一个新Class,将相关的Field和Method从旧Class移到新Class

《重构:改善既有代码的设计》—重构列表

重构列表重构:改善既有代码的设计Add Parameter(添加参数) Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) Change Reference to Value(将引用对象改为值对象) Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) Change Value to Reference(将值对象改为引用对象) Collapse H

PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性_php技巧

思维导图 索引: Ø Move Method(搬移函数) Ø Move Field (搬移值域) Ø Extract Class (提炼类) Ø Inline Class (将类内联化,就是把当前的类合并到其他类中) Ø Hide Delegate (隐藏委托关系) Ø Remove Middle Man ( 移除中间人) Ø Introduce Foreign Method (引入外加函数) Ø Introduce Local Extension (引入本地扩展)    介绍    承接上文P

改善代码设计 优化物件之间的特性(Moving Features Between Objects)

系列博客 1. 改善代码设计 -- 优化函数的构成(Composing Methods) 2. 改善代码设计 -- 优化物件之间的特性(Moving Features Between Objects) 3. 改善代码设计 -- 组织好你的数据(Composing Data) 4. 改善代码设计 -- 简化条件表达式(Simplifying Conditional Expressions) 5. 改善代码设计 -- 简化函数调用(Making Method Calls Simpler) 6. 改善