命令者模式

J_W發表於2019-01-02
該模式屬於行為型模式,行為被包裝在物件裡面。
複製程式碼
//命令者
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());
    }
}
複製程式碼

相關文章