设计模式——行为型模式(一)

      行为型模式描述程序运行时的流程控制(复杂),主要是描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,其中包括了算法与对象间职责的分配。

       行为型模式和结构型模式一样,分为对象行为模式,类采用的继承机制来在类间分派行为,对象采用组合或聚合在对象间分配行为。因为组合关系或聚合关系比继承关系耦合度低,所以满足合成复用原则,所以对象行为模式比类行为模式具有更大的灵活性。

这篇博客介绍的行为性模式有:观察者模式、模板方法模式、命令模式、状态模式、职责链模式

一、观察者模式:多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。(对象行为模式)

适用情况:当前对象的状态发生改变,所有的观察者对象都将得到通知,进行广播通知,并视情况更新自己的状态。

优点:降低了目标与观察者之间的耦合关系,目标与观察者之间建立了触发机制。

缺点:目标与观察者之间的依赖关系依然存在,当观察者对象很多时,通知会花费很多时间,影响效率。

二、模板方法模式:定义一个操作中的算法骨架,将算法的一些内容延迟到子类中,使子类可以不改变该算法结构的情况下重定义该算法的某些内容。(类行为型模式)

适用情况:有多个子类共有的方法,且逻辑相同或者重要的、复杂的方法,可以考虑作为模板方法。

优点:封装不变部分,提取公共代码,扩展可变部分。便于维护,父类控制行为。

缺点:每个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

三、命令模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。(对象行为模式)

适用情况:是命令的地方都可以使用命令模式。

优点:降低系统的耦合度。能调用操作的对象与实现该操作的对象解耦。增加或删除命令非常方便。命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,扩展灵活。

缺点:导致某些系统有过多的具体命令类。

四、状态模式:一个对象在其内部状态发生改变时改变其行为。(对象行为模式)

适用情况:代码中有大量与对象状态有关的判断语句。

优点:将不同状态的行为分割开来,满足单一职责原则;减少对象间的相互依赖;有利于程序的扩展,通过定义新的子类很容易地增加新的状态和转换。

缺点:增加系统的类与对象的个数;结构与实现都较为复杂。

五、职责链模式:请求从链中的一个对象传到下一个对象,直到请求被响应为止。(对象行为模式)

适用情况:职责链上的处理者负责处理请求,只需要将请求发送到职责链上,无须关心请求的处理细节和传递。

优点:降低耦合度(将请求的发送者和接收者解耦);简化对象(使得对象不需要知道链的结构); 增加新的请求处理类很方便。

缺点:请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直到最后都无法处理;比较长的职责链,请求的处理可能涉及多个处理对象,性能将到影响。

发布了40 篇原创文章 · 获赞 10 · 访问量 7123

猜你喜欢

转载自blog.csdn.net/xyzyhs/article/details/103185576