设计模式与扩展性

来源:互联网 发布:中国少年编程网 编辑:程序博客网 时间:2024/05/29 15:48

 

获得最大限度复用的关键在于对新需求和现有需求发生变化的预见性,要求系统具有良好的扩展性。一个扩展性不好的设计会导致维护代价的增加,甚至导致重构。

设计模式可以确保系统能以特定方式变化,提高扩展性,从而避免重构。每一个设计模式允许系统结构的某个方面的变化独立于其他方面,这样产生的系统对于某一特殊变化更加健壮。

 

以下一些导致重构的原因,以及解决这些问题的设计模式:

 

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 Responsiblity;

 

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

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

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

设计模式:Bridge,Chain Of Responsiblity,Composite,Decorator,Observer,Strategy;

 

8、不能方便地对类进行修改:

有时,不得不改变一个难以修改的类。也许需要源码而又没有,或者可能对类的任何改变会要求修改许多已存在的其他子类。

设计模式提供这种请况下对类进行修改的方法。

设计模式:Adapter,Decorator,Visitor。

 

 

以上内容源于对《设计模式:可复用面向对象软件的基础》一书内容的整理,因为笔者是个穷银,没钱买书,正好借人家的来看,看完又怕记不住,就整理到这里一份笔记。

 

 

 

原创粉丝点击