Java设计模式之命令模式

来源:互联网 发布:淘宝评价手机怎么修改 编辑:程序博客网 时间:2024/06/16 22:19

定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式涉及的角色:
1.Command:抽象命令类
定义命令的接口,声明执行的方法。
2.ConcreteCommand:具体命令类
命令接口实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
3.Receiver:接收者
接收者,真正执行命令的对象。
4.Invoker:调用者
要求命令对象执行请求,通常会持有命令对象,可以持有多个命令对象。
5.Client:
创建具体的命令对象,并且设置命令对象的接收者。
以下以客户要求打扫卫生为例,解析命令模式。客户要求打扫卫生,往往先找到经理,给经理下命令,经理接到命令,让保洁员去执行命令。在此,客户是Client,经理是Invoker,保洁员是Receiver,具体清洁命令是ConcreteCommand。
Command,抽象命令类

package com.example.command;public interface Command {    void clean();    void undoClean();}

具体命令类

package com.example.command;public class CleanRoomCommand implements Command{    private Cleaner cleaner;    public CleanRoomCommand(Cleaner cleaner) {        this.cleaner = cleaner;    }    @Override    public void clean() {        cleaner.clean("打扫房间");    }    @Override    public void undoClean() {        cleaner.undoClean();    }}

保洁员(接收者)

package com.example.command;public class Cleaner {    public void clean(String workContent){        System.out.println(workContent);    }    public void undoClean(){        System.out.println("放弃打扫卫生");    }}

经理(调用者)

package com.example.command;public class Manager {    private Command command;    public Manager(Command command) {        super();        this.command = command;    }    public void clean(){        command.clean();    }}

客户

package com.example.command;public class Client {    public static void main(String[] args) {        Cleaner cleaner = new Cleaner();        Manager manager = new Manager(new CleanRoomCommand(cleaner));        manager.clean();    }}

打印结果

打扫房间
0 0
原创粉丝点击