【设计模式】设计模式概述

一.策略模式

  定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)

 

   应用场景:

  1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior)

  2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)

  3、 对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。

 

优点:

  1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。

  2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。

  3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。

  缺点:

  1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。

     http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html

 二.观察者模式

    该模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新.

     http://www.cnblogs.com/justinw/archive/2007/05/02/734522.html

 

三.装饰着模式

 该模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案.

http://www.cnblogs.com/justinw/archive/2007/06/11/779356.html

 

四.工厂方法模式

  定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类.

 

五.抽象工厂模式

   提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类.

六.单件模式

   确保一个类只有一个实例,并提供一个全局访问点.

七.命令模式

  将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象.命令模式也支持撤销的操作.

八.适配器模式

   将一个类的借口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间.

 

九.模板方法模式

   在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤.

 

十.迭代器模式

   提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示.

十一.组合模式

   允许你将对象组合成树形结构来表现 "整体/部分"层次结构。组合能让客户以一致的方式处理个别对象以及组合对象。

 

十二.状态模式

   允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类.

      类图与策略模式基本一样,但意图不一样,需要区分。

 一般来说,我们把策略模式想成是除了继承之外的一种弹性替代方案.

   我们把状态模式想成是不用在Context中放置许多条件判断的替代方案.通过将行为包装进状态中,你可以通过在Context中简单地改变状态对象来改变Context的行为.

十三.代理模式

  为另一个对象提供一个替身或占位符以控制对这个对象的访问.

   使用代理模式创建代表(representative) 对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象,创建开销大的对象或需要安全控制的对象.

 

 

模式中的模式

  模式通常被一起使用,并被组合在同一个设计解决方案中.

 复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。

 

MVC 模型--视图--控制器.是复合模式,结合了观察者模式,策略模式和组合模式.

模型使用观察者模式以便观察更新,同时保持两者之间的解耦。

控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为.

视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板,框架.

这些模式携手合作,把MVC模型的三层解耦,这样可以保持设计干净又有弹性.

适配器模式用来将新的模型适配成已有的视图和控制器.

设计模式是MVC的钥匙.

 

posted on 2010-07-29 14:27    阅读(469)  评论(0编辑  收藏  举报