获得最大限度复用的关键在于对新需求和已有需求发生变化时的预见性,要求我们的系统设计能够相应地改进。下面阐述一些导致重新设计的一般原因,以及解决这些问题的设计模式。
(1)、通过显式地指定一个类来创建对象。在创建对像是指定类名将使你受特定实现的约束而不是特定接口的约束,这会使未来的变化更加复杂,要避免这种情况,应该间接地创建对像,此时考虑:Abstract Factory 、Factory Method 、Prototype
(2)、对特殊操作的依赖。当你为请求指定一个特殊地操作时,完成该请求的方式就固定下来了,为了避免把请求代码写死,可以在编译或运行时刻很方便地改变响应请求的方式。此时考虑:Chain of Responsibility  , Command
(3)、对硬件和软件平台的依赖。外部的OS接口和应用编程接口(API)在不同的软硬件平台上是不同的,依赖于特定平台的软件将很难移稙到其它平台上,甚至很难跟上本地平台的更新,所以设计系统时限制其平台相关性就很重要了。此时考虑:Abstract Factory  , Bridge
(4)、对对像表示或实现的依赖。 知道对像怎样表示、保存、定位或实现的客户在对像发生变化时可能也需要变化,阻止连锁变化的办法就是对客户隐藏这些变化。此时考虑:Abstract Factory 、Bridge、Memento、Proxy
(5)、算法依赖。算法在开发和复用时常常被扩展、优化和替代。依赖于某个特定算法的对像在算法发生变变化时不得不变化。因此有可能发生变化的算法应该被孤立起来。此时考虑:Builder、Iterator、Strategy 、Template Method、Visitor
(6)、紧耦合。 紧耦合的类很难独立地被复用,因为它们是互相依赖的。紧耦合产生单快的系统,要改变或删掉一个类,必须理解和改变其它许多类。这样的系统是一个很难学习、移稙和维护的密集体。
松散耦合提高了一个类本身被复用的可能性,并且系统更易于学习、移稙、修改和扩展。设计模式使用抽象耦合和分层技术来提高系统的松散耦合性。此时考虑:Abstract Factory、Command、Façade、Mediator、Observer,Chain of Responsibility
(7)、通过扩充子类来扩充功能。 通常很难通过定制子类来定制对像,每一个新类都有固定的实现开销(初始化,终止处理等),定义子类还需要对父类有深入的了解,如,重定义一个操作可能需要重定义其它操作,并且子类方法会导致类爆炸,因为即使对于一个简单的扩充,你也不得不引入许多新的子类。
一般的对像组合技术和委托技术,是继承之外组合对像行为的另一种灵活的方法,新的功能可以通过新的方式组合已有对像,而不是通过定义已经存在的类的子类的方式加到应用中去,另一方面,过多使用对像组合会使设计难于理解。许多设计模式产生的设计中,你可以定义一个子类,且将它的实例和已存在的实例进行组合来引入定制的功能。设计模式:Bridge,Chain of Responsibility,Composite,Decorator,Observer,Strategy。
(8)、不能方便地对类进行修改。有时候不得不改变一个难以修改的类,也许你需要而已没有(商业类库),或许可能对类的任何改变会要求修改许多已存在的其它子类,设计模式提供在这些情况下对类进行修改的方法。Adapter,Decorator,Visitor

本文转自   wenyan  51CTO博客,原文链接: http://blog.51cto.com/wenyan/9946

《Design patterns》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. node编写定时任务,for循环只执行一遍的解决办法
  2. 数据库字段命名及设计规范
  3. Java list三种遍历方法性能比较
  4. 二维数组更改vue_使用vue中的v-for遍历二维数组的方法
  5. cstring越界_try catch 捕捉数组越界异常
  6. wifi测试相关(iwconfig,WPA Supplicant用法)
  7. mysql数据库dao模式_古诗MySQL数据库DAO模式实现
  8. 拆解飞机黑匣子,看看内部构造、PCB及芯片
  9. Redis学习日记-05:SORT命令
  10. matlab 如何hidden,Matlab基本函数-hidden函数
  11. LeetCode 169. 求众数(摩尔投票)
  12. bcscale php,【PHP开发】bcscale timezone charset的设定说明
  13. 有哪些问题应该得到解决?
  14. 电脑出现的问题以及解决方法
  15. IDEA中使用SQLite数据库
  16. java的JDBC简单案例
  17. 一次Nginx 502问题解决
  18. python语言标识符首字符不能是汉字_python二级电子教案 第2章 Python语言基本语法元素...
  19. ABAP使用LOOP AT ASSIGNING FIELD SYMBOL直接更新内表数据
  20. 一零二八、将csdn文章内容保存成 html、pdf、md格式

热门文章

  1. JS 进阶知识点及常考面试题
  2. 剑指offer51 构建乘积数组(图解)
  3. PAT乙级 1013 数素数
  4. 计网期末复习 - 数据报分片
  5. SpringData_Repository接口概述
  6. vue-router 跳转原理
  7. 关于Image创建的内存管理
  8. windows vbs显示桌面命令
  9. [转]android logo:内核、android开机动画
  10. 动网论坛新手详尽教程