导致面向对象软件重新设计的一般原因

下面阐述了一些导致重新设计的一般原因,以及解决这些问题的设计模式:

1. 通过显示地指定一个类来创建对象

在创建对象时指定类名将使你受特定实现的约束而不是特定接口的约束。这会使未来的变化更复杂。要避免这种情况,应该间接地创建对象。

设计模式: Abstract Factory, Factory Method, Prototype.

2. 对特殊操作的依赖

当你为请求指定一个特殊操作时,完成该请求的方式就固定下来了。为了避免把请求写死,你将可以在编译时刻或运行时刻很方便地改变响应请求的方法。

设计模式: Chain of Resposibility, Command.

3. 对硬件和软件平台的依赖

外部的操作系统接口和应用程序接口(API)在不同的软硬件平台上市不同的。依赖于特定平台的软件将很难移植到其他平台上,甚至都很难跟上本地平台的更新。所以设计系统时限制其平台相关性就很重要了。

设计模式: Abstract Factory, Bridge.

4. 对对象表示或实现的依赖

知道对象怎样表示、保存、定位、或实现的客户在对象发生变化时可能也需要变化。对客户隐藏这些信息能阻止连锁变化。

设计模式: Abstract Factory, Bridge, Memento, Proxy.

5. 算法依赖

算法在开发和复用时,常常被扩展、优化和替代。依赖于某个特定算法的对象在算法发生变化时不得不变化。因此有可能发生变化的算法应该被孤立起来。

设计模式: Builder, Iterator, Strategy, Template Method, Visitor

6. 紧耦合

紧耦合的类很难孤立地被复用,因为他们是互相依赖的。紧耦合产生单块的系统,要改变或删掉一个类,你必须理解和改变其他许多类,这样的系统是一个很难学习,移植和维护的密集体。

设计模式: Abstract Factory, Command, Facade, Mediator, Observer, Chain of Responsibility.

7. 通过生成子类来扩充功能

通常很难通过定义子类来定制对象。每一个子类都有固定的实现开销(初始化、终止处理等)。定义子类还需要对父类有深入的了解。如,重定义一个操作可能需要重定义其他操作。一个被重定义的操作可能调用继承下来的操作。并且子类方法会导致类爆炸,因为即使对于一个简单的扩充,你也不得不引入许多新的子类。

一般对象组合技术和具体的委托技术,是继承之外组合对象行为的另一种灵活方法。新的功能可以通过以新的方式组合已有对象,而不是通过定义已存在类的子类的方式加到应用中去。另一方面,过多使用对象组合会使设计难于理解。许多设计模式产生的设计中,你可以定义一个子类,且将他的实例和已存在的实例进行组合来引入定制的功能。

设计模式:Bridge, Chain of Responsibility, Composite, Decorator, Observer, Strategy.

8. 不能方便的对类进行修改

有时你不得不改变一个难以修改的类。也许你需要源代码而又没有(对于商业类库就有这种情况),或者可能对类的任何改变会要求修改许多已存在的其他子类。设计模式提供在这些情况下对类进行修改的方法。

设计模式: Adapter, Decorator, Visitor.

文章摘录于:设计模式(可复用面向对象软件的基础)

时间: 2024-11-29 11:05:35

导致面向对象软件重新设计的一般原因的相关文章

设计模式-可复用面向对象软件的基础 [读书笔记]

由于如下笔记中有直接描述是该书的第几节,因此将该书的封面贴下: 1.将软件与设计模式比拟为城市与建筑模式,那么在面向对象的解决方案里,我们将对象和接口看成墙壁和门窗,模式的核心在于提供了相关问题的解决方案. 在软件设计中可能会遇到很多类似的问题,在每次遇到类似问题时我们不必全都新想办法来解决,而可以复用之前解决类似问题的方案,解决问题多之后就 会有针对特定问题有特定(相对固定)的方式方法来解决,这相对固定的方式方法就是设计模式,其也算是经验总结. 开篇有两种在设计模式书籍里面很重要的表格和关系图

解决导致kdm无法正常启动的原因

因为 ~/.bash_profile 和 ~/.xinitrc中加入了 export XAUTHORITY="/tmp/${USER}.Xauthority" 所以每次启动桌面都无法成功 注释掉后即可正常进入桌面 使用登录管理器后,会调用 ~/.xprofile的变量,因此需要注意 case ${INPUT_APP} in fcitx) # 使用小企鹅输入法 export XIM=fcitx export XMODIFIERS="@im=fcitx" export

电子书 设计模式:可复用面向对象软件的基础.pdf

<设计模式:可复用面向对象软件的基础>是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶.四位面向对象领域专家精心选取了具价值的设计实践,加以分类整理和命名,并用简洁而易于重用的形式表达出来.本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和语汇.作者简介 Erich Gamma,在苏黎世大学获得计算机科学博士学位,曾供职于瑞士联邦银行.Taligent.OTI公司.现在是Eclipse项目的主要技术负责人之一. Ri

软件安装失败,导致ubuntu软件中心软件消失

感谢百度上各位IT界朋友的帮助,由于某个软件安装失败,导致ubuntu软件中心软件消失的解决办法: 找百度,有人说, 使用命令:sudo apt-get install software-center 输入命令后,提示:software-center无法安装,它需要与XXX的依赖关系: 然后,使用命令:sudo apt-get install XXX 又提示:software-center无法安装,它需要与XXX2的依赖关系: 然后,使用命令:sudo apt-get install XXX2

设计模式 可复用面向对象软件的基础 pdf下载

网盘地址:设计模式 可复用面向对象软件的基础 pdf下载 – 易分享电子书PDF资源网 作者: [美] Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides 出版社: 机械工业出版社 副标题: 可复用面向对象软件的基础 原作名: Design Patterns: Elements of Reusable Object-Oriented Software 译者: 李英军 / 马晓星 / 蔡敏 / 刘建中 等 出版年: 2000-9

设计模式_可复用面向对象软件的基础pdf

下载地址:网盘下载 这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来.书中分类描述了一组设计良好.表达清楚的软件设计模式,这些模式在实用环境下特别有用.此书适合大学计算机专业的学生.研究生及相关人员参考. 书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同系统中多次使用过的成功设计. 四位作者均是国际公认的面向对象软件领域的专家. Erich Gamma博士是瑞士苏黎士国际面向对象技术软件中心的技术主管

面向对象软件构造 (Bertrand Meyer 著)

Part A: The Issues 议题 第一章 软件品质 第二章 面向对象的标准 Part B: The Road To Object Orientation 通向面向对象之路 第三章 模块性 第四章 复用性方法 第五章 走进对象技术 第六章 抽象数据类型 Part C: Object-Oriented Techniques 面向对象技术 第七章 静态结构: 类 第八章 运行时结构: 对象 第九章 内存管理 第十章 泛型 第一章 软件品质 1.1 外部和内在的因素 1.2 外部因素介绍 1.

面向对象软件设计原则

提起面向对象,大家也许觉得自己已经非常“精通”了,起码也到了“灵活运用”的境界.面向对象设计不就是OOD吗?不就是用C++.Java.Smalltalk等面向对象语言写程序吗?不就是封装+继承+多态吗? 很好!大家已经掌握了不少对面向对象设计的基本要素:开发语言.基本概念.机制.Java是一种纯面向对象语言,是不是用Java写程序就等于面向对象了呢?我先列举一下面向对象设计的11个原则,测试一下大家对面向对象设计的理解程度-^_^- 单一职责原则(The Single Responsibilit

《设计模式:可复用面向对象软件的基础》摘要(上)

第一章 引言1.什么是设计模式? 设计模式是人们用来解决一些相似的问题和解决这类问题的核心方案.设计模式是用来实现设计复用的.2.设计模式的四要素 名称:描述模式的问题.解决方案和效果.名称有助于人们之间交流设计思想和设计结果. 问题:描述了何时使用模式.它描述了设计问题以及问题存在的前因后果. 解决方案:描述了设计的组成部分,以及它们之间的相互关系.各自的职责和协作方式. 效果:描述了模式应用的效果及使用模式应权衡的问题.3.本书如何描述一种设计模式? 从以下方面来描述:模式名称和分类.意图.