二十三种设计模式笔记

读《设计模式:可复用面向对象软件的基础》笔记,这本书应该是所有看过关于设计模式中将的最好的一本书。

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

1) 通过显式地指定一个类来创建对象在创建对象时指定类名将使你受特定实现的约束,而不是特定接口的约束。这会使未来的变化更复杂。要避免这种情况,应该间接地创建对象。设计模式: Abstract Factory(),Factory Method(),Prototype( )。

2) 对特殊操作的依赖当你为请求指定一个特殊的操作时,完成该请求的方式就固定下来了。为避免把请求代码写死,你将可以在编译时刻或运行时刻很方便地改变响应请求的方法。设计模式: Chain of Resposibility(),Command ( )。

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

设计模式: 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 ( )。

 

表1-2 设计模式所支持的设计的可变方面

 

目的

设计模式

可变的方面

创建

Abstract Factory

B u i l d e r

Factory Method

P r o t o t y p e

S i n g l e t o n

产品对象家族

如何创建一个组合对象

被实例化的子类

被实例化的类

一个类的唯一实例

结构

A d a p t e r

B r i d g e

C o m p o s i t e

D e c o r a t o r

F a c a d e

F l y w e i g h t

P r o x y

对对象的接口

对对象的实现

对一个对象的结构和组成

对对象的职责,不生成子类

对一个子系统的接口

对对象的存储开销

对如何访问一个对象;该对象的位置

行为

Chain of Responsibility

C o m m a n d

I n t e r p r e t e r

I t e r a t o r

M e d i a t o r

M e m e n t o

 

O b s e r v e r

 

S t a t e 

S t r a t e g y 

Template Method

Vi s i t o r

对满足一个请求的对象

对何时、怎样满足一个请求

对一个语言的文法及解释

对如何遍历、访问一个聚合的各元素

对对象间怎样交互、和谁交互

对一个对象中哪些私有信息存放在该对象之外,以及在什么时候进行存储

对多个对象依赖于另外一个对象,而这些对象又如何保持一致

对象的状态

算法

对算法中的某些步骤

对某些可作用于一个(组)对象上的操作,但不修改这些对象的类

 

 

 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值