`
arcticfox9902
  • 浏览: 107192 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

行为型模式

阅读更多

1、策略模式(Strategy Pattern)

        策略模型定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

 

2、观察者模式(Observer Pattern)

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

        Java API有内置的观察者模式,java.util包内包含最基本的Observer接口与Observable类。Observer接口声明了update()方法,Observable类声明了addObserver()、deleteObserver()、notifyObservers()、setChanged()方法,setChanged()方法把changed标志设为true,notifyObservers()只会在changed为true时通知观察者,通知观察者之后,把changed标志设回false。

        Observable是一个类!因此你必须设计一个类继承它,如果想同时具有Observable类和另一个超类的行为,就会陷入两难(Java不支持多继承),这限制了Observer的复用潜力。Observable类的setChanged()方法是protected的,这意味着必须继承自Observable,否则无法使用setChanged()。因此,如果你能够扩展Observable,那么Observable“可能”可以符合你的需求,否则就需要自己实现一整套观察者模式。

 

3、命令模式(Command Pattern)

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

 

4、模版方法模式(Template Method Pattern)

        模版方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。

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

        这个模式是用来创建一个算法的模板。这里的模板就是一个方法,更具体的说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。

        钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。当你的子类“必须”提供算法中某个方法或步骤的实现时,就使用抽象方法。如果算法的这个部分是可选的,就用钩子。钩子可以让子类实现算法中可选的部分,或者在钩子对于子类的实现并不重要的时候,子类可以对钩子置之不理;钩子的另一个用法是让子类能够有机会对模版方法中某些即将发生(或刚刚发生)的步骤做出反应。

        抽象方法的数目取决于算法内步骤切割的粒度,如果步骤切割得太细,抽象方法的数目较多,在子类中实现这些方法将会很麻烦,但是如果步骤太少,会比较没有弹性,所以要看情况折中。

 

5、迭代器模式(Iterator Pattern)

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

 

6、状态模式(State Pattern)

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

        这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象,Context对象会随着时间而改变状态,基于内部状态而拥有不同的行为。

 

7、解释器模式(Interpreter Pattern)

        定义语言的文法,并建立一个解释器使用该文法来解释语言中的句子。

        解释器模式由以下部分组成:

1)        抽象表达式角色:声明一个抽象的解释操作,这个接口为所有具体表达式角色(抽象语法树中的节点)都要实现的。

什 么叫做抽象语法树呢?《java与模式》中给的解释为:抽象语法树的每一个节点都代表一个语句,而在每个节点上都可以执行解释方法。这个解释方法的执行就 代表这个语句被解释。由于每一个语句都代表这个语句被解释。由于每一个语句都代表一个常见的问题的实例,因此每一个节点上的解释操作都代表对一个问题实例 的解答。

2)        终结符表达式角色:具体表达式。

a)        实现与文法中的终结符相关联的解释操作

b)        而且句子中的每个终结符需要该类的一个实例与之对应

3)        非终结符表达式角色:具体表达式。

a)        文法中的每条规则R::=R1R2…Rn都需要一个非终结符表带式角色

b)        对于从R1到Rn的每个符号都维护一个抽象表达式角色的实例变量

c)        实现解释操作,解释一般要递归地调用表示从R1到Rn的那些对象的解释操作

4)        上下文(环境)角色:包含解释器之外的一些全局信息。

5)        客户角色:

a)        构建(或者被给定)表示该文法定义的语言中的一个特定的句子的抽象语法树

b)        调用解释操作

 

绿色部分转载自http://solecjj.blogbus.com/logs/21046995.html

 

8、职责链模式(Chain of Responsibility Pattern)

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

 

9、中介者模式(Mediator Pattern)

        用一个中介对象来封装一系列关于对象交互行为。

 

10、访问者模式(Visitor Pattern)

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

        访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。目地是要把处理从数据结构分离出来。

 

11、备忘录模式(Memento Pattern)

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics