行为型模式总结篇(1)

来源:互联网 发布:qq电脑加速软件 编辑:程序博客网 时间:2024/06/13 02:18

行为型模式

行为型模式涉及到算法和对象间职责的分配,行为模式描述了对象和类的模式,以及它们之间的通信模式,行为型模式刻画了在程序运行时难以跟踪的复杂的控制流可分为行为类模式和行为对象模式

行为类模式使用继承机制在类间分派行为;行为对象模式使用对象聚合来分配行为。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任何一个对象都无法单独完成的任务。

一、观察者模式

观察者模式

作用:

观察者模式(对象行为型)定义了一种一对多的依赖关系,让多个观察者对象同时某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

要点:

1、定义一个通知人的接口(被观察者)Notifier,再定义一个观察者接口Observer

2Notifier中包含他所需要通知到的观察者的引用,当Notifier状态发生变化时,循环遍历所有观察者,通知他们update()

备注:

观察者模式所做的工作其它就是在解除耦合,让耦合的双方都依赖于,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。JDK中,被观察者为java.lang.util.Observable接口和观察者为java.lang.util.Observer接口。SWING中各种事件的触发,也是观察者模式的一种体现,扩展java.util.Eventlistener接口,定义观察者对象,通过java.util.EventObject类定义触发的事件源,通过定义EventHandler来实现被观察者。

二、模板方法模式

模板方法模式

作用:

模板方法模式(类行为型)定义一个操作的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构而重定义该算法的某些特定步聚。

要点:

定义逻辑的整体骨架Templete类,todo()方法实现了整体的算法逻辑,其中抽象方法stepOne()stepTwo()为占位方法,由子类中去实现具体的实现步聚。

备注:

当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时。可以使用模板方法模式。

三、命令模式

命令模式

作用:

命令模式(对象行为型)将一个请求封闭为一个对象,从而使你可用不同的请求对客户进行参数化,可以对请求排除或记录请求日志,还可进行撤销操作。

要点:

1、定义一个Command方法,里面包含todo()方法。

2、定义命令的执行者Executor类,它包含多个功能操作todoOne()todoTwo()

3、通过实现Command接口,定义具体单个命令的实现类,里面包含一个Executor的引用,调用Executor的某个方法,完成命令

4、定义一个Manager类,通过List<Command>变量,将多个缓存多个Command对象。并通过commit()方法,最终执行所包含的命令组。

备注:

命令模式最大的优点在于,把请求一个操作的对象与知道怎么执行一个操作的对象分离。从而使命令模式,可以在需要地情况下,对命令序列进行其它操作,如将命令写入日志等。

四、状态模式

状态模式

作用

状态模式(对象行为型)指当一个对象的内在状态改变时,允许改变其行为,让这个对象看起来像是自身改变了一样。

要点

1、定义一个状态接口,包含nextState()方法,以状态所属的具体工作对象work为参数。

2、在nextState()方法中,根据需要将work的状态改变成另一个新建的state实例。

3Work保存着一个State实例,State实例中的nextState()方法里除了处理本状态对应的逻辑外,还对work.setState()赋值为其它的状态。

4WorkState两者形成双向关联。使用端只要调用todo()的方法就行。Todo()方法包含着将curState.nextState(this)方法。用于循环转换状态。

备注

当一个对象的行为取决于它的状态,且它必须在运行时刻根据状态改变它的行为时或控制一个对象状态转换的条件表达式过于复杂时就可以使用状态模式,状态模式把状态的判断逻辑转移到表示不同状态的一系列子类当中,简化复杂的逻辑及各状态之相互依赖。

五、职责链模式

职责链模式

作用:

职责链模式(对象行为型)将多个处理请求的对象连成一条链,每个对象都有处理请求的机会,当前对象控制是否将请求转移到下一个对象。请求沿着职责链对象向上传递,直到被处理为止。

要点:

1、定义一个职责链Handler抽象类,里面包含着下一级Handler实例。

2Handler中实现抽象方法todo(),并根据需要,调用parentHandler.todo()将请求转移到上一层Handler处理。

3、客户端类,在实例化Handler时调用setParent()方法,初始化好整个职责链对象。

备注:

职责链模式可以简化对象之间的相互连接,链中的对象并不需要知道整个链的结构,他们只需要保持一个指向后继者的引用。通过使用职责链模式,可以随时地增加或修改处理一个请求的结构,增强对象指派的录活性。当然,一个请求极有可能到最后都得不到处理,这个在设计时应该考虑全面。

原创粉丝点击