您的位置:首页 > 其它

设计模式--对象行为模式比较

2016-06-13 22:47 211 查看
http://blog.csdn.net/myjoying/article/details/7940627

1、职责链模式(Chain of Responsibility):

      使多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

      职责链模式其实我们接触的很多,例如MFC中的消息处理机制。



 

 

2、命令模式(Command):

        Command模式通过将请求封装到一个对象(Command)中,并将请求的接收者存放到具体的ConcreteCommand类(Receiver)中,从而实现调用操作的对象和操作的具体实现者之间的解耦。

        Receiver:请求的接收者,将该类对象放置到具体的命令中,实现命令和接收者之间的一一对应;

        Command:具体的执行命令;

        Invoker:命令的组织者,并实际激活命令的动作。

          参考:http://www.cnblogs.com/sjms/archive/2010/07/09/1774069.html



     

3、解释器模式(Interpreter):

        给定一个语言,定义它的文法的一种表示,并定义个解释器,这个解释器使用该表示来解释语言中的句子。

         参考:http://www.cnblogs.com/cbf4life/archive/2009/12/17/1626125.html

 



4、迭代器模式(Iterator):

      提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象内部的表示。最常见的迭代器模式的应用是STL中访问Vector或者List的迭代器了。

      Aggregate:聚合类,其中提供创建相应迭代器对象的接口,并提供访问某个具体元素的接口;

      Iterator:定义访问和遍历元素的接口。

      


 

5、中介者模式(Mediator):

       用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

       Mediator:中介的抽象类,含有交互接口;

       Colleague:交互对象的抽象类,具体交互动作的拥有者。

       参考:http://www.cnblogs.com/Mayvar/archive/2011/09/08/wanghonghua_201109080334.html

 



 

6、备忘录模式(Memento):

      在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以对该对象回复到原先保存的状态。



 

7、观察者模式(Observer):

     定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖与它的对象都得到通知并被自动更新。大名鼎鼎的MVC模式的基础也是基于观察者模式。







 

8、状态模式:

      允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了他的类。

      其中,Context将与状态相关的操作委托给当前的Concrete State对象处理;Context可将自身作为一个参数传递给处理该请求的状态对象,这使得状态对象在必要时可访问Context。 Context或Concrete State类都可决定哪个状态是另外哪一个的后继者,以及是在何种条件下进行状态转换。也就是说可以在State中保存对Concrete State的引用,在必要时设置具体的状态,做到状态的转换。一般来讲,当状态转换是固定的时候,状态转换就适合放在Context中。然而,当转换是更动态的时候,通常会放到具体的状态类中进行。(具体状态类持有Context的引用,实现状态的转换)。

 



 

 

9、策略模式:

      将算法逻辑(抽象)和他们的具体实现分开。值得注意的是策略模式和状态模式具有相似的类图,二者在实现方式上是相似的,但是二者的意图是截然不同的。状态模式的目的是通过状态的变化实现类控制自身的行为,而策略模式是通过互换算法来实现所需要的算法功能。另外,状态模式中Context可以作为参数传递给State,而策略模式中的Context并不能作为参数传递给Strategy。从策略模式的具体形式上倒是与简单工厂相似,都可以通过参数的不同创建不同的对象实现,不同的是简单工厂模式需要将创建的产品返回给用户,而策略模式只是完成相应的功能而已。

 



 

 

10、模板方法模式(Template Method):

      定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。其实,模板方法和策略模式对于抽象接口两种不同的实现:继承和组合。但是需要记住的是,组合的耦合度要比继承更低,具有更好的扩展性,这是面向对象设计中要优先考虑的。



 

 

11、访问者模式(Visitor):

     表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: