行为型设计模式
行为型模式,设计到算法和对象间的职责分配,不仅描述对象或类的模式,还描述它们之间的通信方式,刻画了运行时难以跟踪的复杂的控制流,它们将你的注意力从控制流转移到对象间的关系上来。
常见行为型模式有11种,分别如下:
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
结构图:
实例:考题抄错会做也是白搭
解释:模板方法模式由一个抽象类组成,这个抽象类定义了需要覆盖的可能有不同实现的模板方法,每个自从这个抽象类派生的具体类将为此模板实现新方法。实现代码重用。
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
结构图:
实例:其实你不懂老板的心
解释:如果一种特定类型的问题发生的频率足够高,那么就可以考虑将该问题的各个实例表述为一个简单语言中的句子。也就是说,通过构建一个解释器,该解释器解释这些句子来解决问题。
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
结构图:
实例:世界需要和平
解释:将集体行为封装一个单独的中介者对象来避免这个问题,中介者负责控制和协调一组对象间的交互。中介者充当一个中介以使组中的对象不再相互显示引用。这些对象仅知道中介者,从而减少了相互连接的数目。
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
结构图:
实例:加薪非要老总批
解释:我们有时候会碰到这种情况,就是有多个对象可以处理一个请求,哪个对象处理该请求事先并不知道,要在运行时刻自动确定,此时,最好的办法就是让请求发送者与具体处理者分离,让客户在不明确指定接收者的情况下,提交一个请求,然后由所有能处理这请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
策略模式:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
结构图:
实例:商场收银软件
解释:继承提供了一种支持多种算法或行为的方法,我们可以直接生产一个类A的子类B、C、D,从而给它以不同的行为。但这样会将行为硬行编制到父类A当中,而将算法的实现与类A的实现混合起来,从而使得类A难以理解、难以维护和难以扩展,而且还不能动态的改变算法。仔细分析会发现,它们之间的唯一差别是它们所使用的算法或行为,将算法封装在独立的策略Strategy类中使得你可以独立于其类A改变它,使它易于切换、易于理解、易于扩展。显然使用对象组合要优于类继承。
命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
结构图:
实例:烤羊肉串引来的思考
解释:将请求发送者与具体实现者分离,即为将调用操作的对象与指导如何实现该操作的对象解耦,可以使我们在不同的时刻指定、排列和执行请求,支持取消/重做的操作。还可以记录整个操作的日志,支持事事务。
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
结构图:
实例:想走?可以!先买票
解释:迭代器模式的关键思想是将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中,迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪当前的元素,并且知道哪些元素已经遍历过了。
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
结构图:
实例:游戏恢复以前的状态值
解释:使用备忘录可以避免暴露一些只应由对象A管理却又必须存储在对象A之外的信息。备忘录模式把可能很复杂的对象A的内部信息对其他对象屏蔽起来,从而保持了封装边界。
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主体对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
结构图:
实例:-老板回来,我不知道
解释:观察者模式,重点在于解除了对象间的紧耦合关系,目标和观察者不是紧密耦合的,他们可以属于一个系统中的不同抽象层次,目标所知道的仅仅是它有一系列的观察者,每个观察者实现Observer的简单接口,观察者属于哪一个具体类,目标是不知道的。
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
结构图:
实例:无尽加班何时休(上班状态、下班状态)
解释:状态模式提供了一个更好的办法来组织与特定状态相关的代码,决定状态转移的逻辑不在单块的if或switch中,而是分布在各个状态子类之间,由于所有与状态相关的代码都存在于某个状态子类中,所以通过定义新的子类可以很容易地增加新的状态和转换。
访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
结构图:
实例:男人和女人
解释:访问者增加具体的Element是困难的,但增加依赖于复杂对象结构的构件的操作就变得容易。仅需增加一个新的访问者即可在一个对象结构上定义一个新的操作。
本文链接:http://blog.csdn.net/caozhangyingfei0109/article/details/8614478
本文作者:廊坊师范学院信息技术提高班九期张薄