设计模式摘抄(3)————行为型模式

来源:互联网 发布:梅雨知时节的全部小说 编辑:程序博客网 时间:2024/06/04 08:26

1、命令模式
命令模式类似于传统程序设计的回调机制。将请求封装成一个对象。
在命令中封装了命令执行的对象和对象所采用的方法
这里写图片描述
在上述架构中,电视机是接受者,遥控器是调用者,其他是抽象命令类和具体命令类。此时,命令也是一个对象,可以被存储和传递。在上述架构中,命令类作为数据成员被存储在遥控器类当中。客户使用遥控器对象中包含的命令对象包含的命令执行方法进行。
代码如下

public class Client {        public static void main(String a[])        {            Command openCommand,closeCommand,changeCommand;            openCommand = new OpenTvCommand();            closeCommand = new CloseTvCommand();            changeCommand = new ChangeChannelCommand();            Controller control = new Controller(openCommand,closeCommand,changeCommand);            control.open();           //打开电视机            control.change();         //换频道            control.close();          //关闭电视机        }}

也是一种解耦合的方法

2、观察者模式
观察者又称之为发布订阅模式,模型视图模式,源-监听模式
定义了对象中一种一对多的依赖关系,使得当一个对象的状态发生改变时,其相关的依赖对象都能得到通知,实现了表示层数据层的分离,并定义了数据传输机制
这里写图片描述
具体的主题类中因为实现了抽象主题接口,可以维护一个实现了抽象观察者接口的对象的列表作为观察者。
在主题发生变化时,主题类手动通知在列表内的所有对象列表已经发生变化。

3、职责链模式
将对象连接成一条链,并沿着这条链传递请求,直到有人处理它为止
在职责链上的所有对象的类都要集成如下的父类

public abstract class Leader {    /** 姓名 **/    public String name;    /** 后继者 **/    protected Leader successor;    public Leader(String name){        this.name = name;    }    public void setSuccessor(Leader successor) {        this.successor = successor;    }    public abstract void handleRequest(LeaveNode LeaveNode);}

4、解释器模式
所谓解释器模式,就是定义语言的文法,并建立一个解释器来解释该语言中的句子

5、迭代器模式
所谓迭代器模式就是提供一种方法顺序的访问一个聚合对象中的各个元素,而不是暴露其内部表示。聚合对象组织元素的数据结构各不相同,有可能是LIST,也有可能是数组,客户无法用统一的方式进行访问,便创造了迭代这模式,用于封装遍历

6、中介者模式
中介者模式用一个中介对象来封装一系列对象的交互,中介者使各个对象不需要显示的相互引用
这里写图片描述
在上图,两个具体同事类的对象便可以通过具体中介者类的对象进行交互

7、备忘录模式
所谓备忘录模式。就是再不破坏封装的情况下,捕获对象一个内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。备忘录实现了一个历史步骤的机制。

8、状态模式
允许一个对象再起内部状态改变时改变它的行为
这里写图片描述
在上图中,房间类包换三个具体房间状态类的对象。通过设定房间的具体状态,调用这三个对象进行操作
缺点是,必然会增加类的个数和兑现的个数

9、策略模式
定义了一些列算法,并将每一个算法封装起来,使他们可以相互替换。
在软件开发中,实现同一个功能可能有一种或者多种策略。可以采用硬编码的方式根据用户的输入来判断(if else或者switch case)具体采用哪种算法,但是如果新增一种算法势必修改代码
这里写图片描述
在这种模式下,新增一种策略显然不需要更改判断分支了,只要重新写一个继承抽象策略类的策略类就可以了。

10、模板方法模式
定义操作算法的框架,而降具体步骤延迟到子类中实现,可以使子类不需要重构算法便可以重新定义每个算法的特定步骤
这里写图片描述
在上图的架构下,只要调用集成了抽象方法类的具体方法类的对象对应的TemplateMethod,便可以使用抽象方法类的算法框架和具体方法类的改动。
模板方法模式减少了代码复用

11、访问者模式
访问者模式中新增访问者无需修改原有代码
这里写图片描述
在上述例子中,处方类包含一个方法需要传入一个继承了访问这类的子类对象的方法,并包含一个继承了药品类的子类的对象的集合。
上述方法使用上述的对象,即调用在具体药品类中的使用一个需要传入继承了访问者类的子类对象的方法。借此,实现了访问者和具体药品的联系

显然,无论是新增一个药和新增一个访问者,都不涉及修改源代码,但是在一定程度上破坏了封装性。

0 0
原创粉丝点击