命令者模式

257 阅读1分钟
该模式属于行为型模式,行为被包装在对象里面。
//命令者
public interface Action {
    public void perform();
}



//真正的执行任务的  命令接受者
public interface CommandAccepter {
    public void save();
    public void open();
    public void close();
}
// 命令发起者
public class Macro {
    private final List<Action> actions;

    public Macro(){
        actions = new ArrayList<>();
    }
    public void record(Action action){
        actions.add(action);
    }
    //定义命令宏
    public void run(){
        actions.forEach(Action::perform);
    }
}

// 具体的命令实现类,在java8中可以简化的部分
public class Open implements Action {
    private final CommandAccepter editor;
    public Open(CommandAccepter editor){
        this.editor=editor;
    }
    @Override
    public void perform(){
        editor.open();
    }
}

public class Demo {
    public static void main(String[] args) {
        Macro m=new Macro();
        CommandAccepter accepter = null;

        //old way 需要有一个Open命令对象实现Action接口;
        m.record(new Open(accepter));
        //lambda way
        //不需要新建一个Close 命令实现。
        m.record(()->accepter.close());
    }
}