欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式8之(命令模式)

程序员文章站 2022-05-26 08:39:07
...

设计模式8之(命令模式)

命令模式

若有不恰之处,请各位道友指正~

个人觉得,看懂类图就是学习设计模式的精髓了。

设计模式8之(命令模式)

策略模式概念

  • 将“请求” 封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持撤销的操作。

根据类图写代码
代码结构
设计模式8之(命令模式)

public interface Command {

    void execute();
}
public class Students {

    /**
     * 开班会
     */
    public void meeting(){
        System.out.println("attend meeting....");
    }

    /**
     * 参加讲座
     */
    public void attendLecture(){
        System.out.println("attend lecture....");
    }

}
public class MeetCommand implements Command{

    Students students;

    public MeetCommand(Students students) {
        this.students = students;
    }

    @Override
    public void execute() {
        students.meeting();
    }
}
public class Monitor{

    Command command;

    public void set(Command command) {
        this.command = command;
    }
    
    public void notice() {
        command.execute();
    }
}
public class Test{

    public static void main(String[] args) {
       Monitor monitor = new Monitor();
       Students stu = new Students();
       MeetCommand  meetCommand = new MeetCommand(stu);
       monitor.set(meetCommand);
       monitor.notice();
    }

}

执行的动作已经完成了
实现撤销的话

// Monitor 中添加上一个动作,也可以用队列去保存一系列动作
Command undoCommand; 

public Monitor(){
	//需要初始化
	undoCommand = new Command();
} 

// ...

//在 Students 中写undo 方法
//在 MeetCommand 中 undo 的实现方法 
 

再说说宏命令

// 利用数组实现,把一组命令添加到数组中,即可实现
// 题外:在实际开发中,我们也是尽可能写最简单的方法,然后用一些组合去完成实际操作(虽然会觉得某些放大冗余,但是看起来干净就ok了)。
Command[] command;


相关标签: 命令模式