某个类做了过多的简单委托动作。让客户直接调用受托类。

动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处。但是这层封装也是要付出代价的,它的代价是:每当客户要使用受托类的新特性时,你就必须在服务端添加一个简单委托函数。随着委托类的特性(功能)越来越多,这一过程让你痛苦不已。服务类完全变成了“中间人”,此时你就应该让客户直接调用受托类。

很难说什么程度的隐藏才是合适的。还好,有了Hide Delegate (隐藏委托关系)和Remove Middle Man (移除中间人),你大可不必操心这个问题。因为你可以在系统运行过程中不断进行调整。随着系统的变化,“合适的隐藏程度”这个尺度也相应改变。6个月前恰如其分的封装,现今可能就显得笨拙。重构的意义在于:你永远不必说对不起—只要把出问题的地方修补好就行了。

做法:1、建立一个函数,用以获得受托对象。

2、对于每个受托函数,在服务类中删除该函数,并让需要调用该函数的客户转为调用受托对象。

3、处理每个受托函数后,编译、测试。

最新文章

  1. 对 Visual Studio 中的Resharper禁用对某种文件的检测
  2. Spring-----定时任务Quartz配置
  3. 微信小程序上传文件
  4. JS-确认框
  5. 针对各种浏览器css不兼容的写法
  6. 和iPhone有关的视图控制器:UIViewController、UITabBarController、UINavigationController及其混合用法
  7. MySQL分区表(转)
  8. maven插件的生命周期的详细说明(两)
  9. bzoj 4824: [Cqoi2017]老C的键盘
  10. mysql5.7安装和修改密码
  11. python连接mysql数据库读取数据
  12. 阿里的fastJson.jar jsonArray 和 list 互转
  13. C++入门篇一
  14. leetcode每日刷题计划-简单篇day4
  15. Python之路(第三十二篇) 网络编程:udp套接字、简单文件传输
  16. CSS公共清除浏览器默认样式
  17. yii2.0如何优化路由
  18. Python练习之用户登录-5
  19. 【git之】fetch和 pull的区别
  20. TiDB数据库 mydumper与loader导入数据

热门文章

  1. 软件工程 speedsnail 第二次冲刺10
  2. C语言的问卷调查
  3. sleep(),wait(),yield(),notify()
  4. iOS- 利用AFNetworking(AFN) - 实现文件上传
  5. Mac10.11.2 Apache 服务配置
  6. (六)Jmeter重要组件的执行顺序及作用域
  7. bootstrap心得
  8. Additinal Dependencies和#pragma comment(lib,"*.lib")的分析
  9. 手机uc不支持伪元素使用animation动画;移动端background-attachment:fixed不兼容性
  10. Mybatis 点点滴滴