访问者模式

定义

封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

类图

角色

  • Visitor:接口或者抽象类,定义了对每个 Element 访问的行为,它的参数就是被访问的元素,它的方法个数理论上与元素的个数是一样的,因此,
    访问者模式要求元素的类型要稳定,如果经常添加、移除元素类,必然会导致频繁地修改 Visitor 接口,如果出现这种情况,则说明不适合使用访问者模式。
  • ConcreteVisitor:具体的访问者,它需要给出对每一个元素类访问时所产生的具体行为。
Read More

责任链模式

定义

免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

类图

角色

  • 抽象处理者(Handler)角色:声明了所有具体处理者的通用接口。 该接口通常仅包含单个方法用于请求处理, 但有时其还会包含一个设置链上下个处理者的方法。

Read More

状态模式

定义

State Pattern:允许一个对象在其内部状态改变的时候改变其行为。

状态模式的状态是不可替换的而且是兄弟关系,但是策略模式是可以替换的彼此独立的。他们执行完之后的行为也不同,状态模式会更改状态但是策略模式执行完就是执行完。

类图

策略模式的类图一样…

角色

Read More

策略模式

定义

Strategy Pattern:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,
抽象策略Strategy一般是一个接口,目的只是为了定义规范,里面一般不包含逻辑。

类图

角色

  • Context(环境类):维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流。目的是避免高层模块对策略的直接调用。
Read More

观察者模式

定义

Observer Pattern:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

类图

角色

  • 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,
    可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。
  • 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。
    具体主题角色又叫做具体被观察者(Concrete Observable)角色。
Read More