命令模式

来源:互联网 发布:三星淘宝官方旗舰店 编辑:程序博客网 时间:2024/06/05 07:56

命令模式(Command Pattern)属于行为型模式。这个模式将请求通过命令的形式封装成对象。用来将“行为请求者”与“行为实现者”解耦,这样用户只需要提出一个命令,而不用关心这个命令由谁实现。应用场景:比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的,可以采用命令模式。

命令接口:

public interface Task {    void execute();}

具体的命令:

public class TaskBug implements Task {    private Worker worker;    public TaskBug(Worker worker) {        this.worker = worker;    }    @Override    public void execute() {        worker.fixBug();    }}public class TaskCode implements Task {    private Worker worker;    public TaskCode(Worker worker) {        this.worker = worker;    }    @Override    public void execute() {        worker.doCoding();    }}

行为的实现者:

public class Worker {    private String name;    public Worker(String name) {        this.name = name;    }    public void doCoding() {        System.out.println(name + "打代码");    }    public void fixBug() {        System.out.println(name + "改bug");    }}

行为的调用者:

public class Invoker {    private List<Task> taskList = new ArrayList<>();    public void addTask(Task order) {        taskList.add(order);    }    public void excuteTasks() {        for (Task order : taskList) {            order.execute();        }        taskList.clear();    }}

调用:

// invoker是命令的调用者Invoker invoker = new Invoker();// worker是命令的执行着Worker worker = new Worker("小明");// 创建和worker相关的两个命令TaskCode taskCode = new TaskCode(worker);TaskBug taskBug = new TaskBug(worker);// 执行命令invoker.addTask(taskCode);invoker.addTask(taskBug);invoker.excuteTasks();

输出结果:

小明打代码小明改bug

优点:降低统耦合度。 添加很容易添加新的命令

缺点:使用命令模式可能会导致有过多的具体命令类

原创粉丝点击