综合对比各个设计模式的思想

模式大体上分为3类,分别从对象的创建、对象的结构和对象的行为这3个方面来总结软件开发人员在设计方面的经验。

(1)创建型模式。

l  简单工厂模式(Simple Factory):定义一个具体的工厂类来负责创建一些类的实例,而这些被创建的类都应该有一个共同的父类,这样就可以实现面向抽象而不是面向具体编程。客户类和工厂类分开,客户类任何时候需要某种产品,只需向工厂请求即可,客户类无需修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。

l  工厂方法模式(Factory Method):抽象工厂类负责定义创建对象的接口,具体对象的创建工作由实现抽象工厂的具体工厂类来完成。工厂类不再负责所有产品的创建,而是将具体的创建工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

l  抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

l  创建者模式(Builder):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立地变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

l  原型模式(Prototype):通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。

l  单例模式(Singleton):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

(2)结构型模式。

l  外观模式(Facade):为子系统对外提供的一组接口提供一个统一的界面,使得其他系统对该系统的访问都通过这个统一的界面来完成。

l  适配器模式(Adapter):把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。

l  代理模式(Proxy):代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。

l  装饰模式(Decorator):装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。

l  桥模式(Bridge):将抽象化与实现化脱耦,使得两者可以独立地变化,也就是指在一个软件系统的抽象化和实现化之间使用组合关系而不是继承关系,从而使两者可以独立地变化。

l  组合模式(Composite):用来描述整体与部分的关系,组合模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。

l  享元模式(Flyweight):享元模式以共享的方式高效地支持大量的细粒度对象,享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的,享元模式大幅度地降低内存中对象的数量。

(3)行为型模式。

l  模板方法模式(Template Method):定义一个算法执行的骨架,而将具体的算法延迟到子类中来实现。

l  观察者模式(Observer):让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

l  状态模式(State):状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类,状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。

l  策略模式(Strategy):策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。

l  职责链模式(Chain of Responsibility):请求在职责链上传递,直到链上的某一个对象决定处理此请求,客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态地重新组织链和分配责任。

l  命令模式(Command):命令模式把一个请求或者操作封装到一个对象中,命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

l  访问者模式(Visitor):访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。

l  调停者模式(Mediator):调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显依赖,从而使它们可以松耦合。调停者模式将多对多的相互作用转化为一对多的相互作用。

l  备忘录模式(Memento):备忘录对象是一个用来存储另外一个对象内部状态的快照的对象,备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态存储起来,从而可以在将来合适的时候把这个对象还原到存储前的状态。

l  迭代器模式(Iterator):可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。

模板模式和策略模式的应用情景类似,但实现方式不同,前者使用继承,后者使用委托。模板模式的缺点是把具体实现和通用算法紧密地耦合起来,使得具体实现只能被一个通用算法操纵,而策略模式是委托的经典用法,策略模式消除了通用算法和具体实现的耦合,使得具体实现可以被多个通用算法操纵,策略模式也增加了类层次,比模板模式复杂。

在Java中已经实现了观察者模式、迭代器模式,而备忘录模式、职责链模式、解释器模式在通常的企业应用开发中并不经常使用。

posted @ 2009-11-20 17:42  Silver.Lee  阅读(235)  评论(0编辑  收藏  举报