命令模式
来源:互联网 发布:laravel php artisan 编辑:程序博客网 时间:2024/06/06 03:56
1.应用场景
如果一个遥控器拥有多个按钮,每个按钮可以控制开或者关,但是可以动态设置控制不同的组件(比如电视,冰箱等)。
2.这时可以对每一个组件建立相应的命令,并将这些命令动态的设置进遥控器
3.代码实现
遥控器类public class RemoteController{ private Command[] command; //如果使用栈则可以从最后开始undo或者do操作(可以用于取消操作),用队列则可以从最前面的操作开始执行undo操作(可以用于系统还原后的恢复) public BlockingQueue<command> undo; public RemoteController(int slotCount){ command = new Command[slotCount]; undo = new ArrayBlockingQueue<command>(slotCount); } public void execute(){ command.execute(); } public void redoAllOperation(){ while(undo.peek() != null){ ((Command) undo.pop()).execute(); } } public setCommand(int slot, Command command){ this.command[slot] = command; }} 灯泡类 public class Light{ private int state = 0;//默认关闭 //get set public void on(){ state = 1; System.out.println("This Light is on"); } public void off(){ state = 0; System.out.println("This Light is off"); } } 命令接口 public interface Command{ void execute(); void undo(); } 灯泡命令 public class LightCommand implements Command{ private Light light; //get set public LightCommand(Light light){ this.light = light; } public void execute(){ if(light.getState() == 0){ light.on(); } else{ light.off(); } } //这儿undo和execute()方法一样 public void undo(){ if(light.getState() == 0){ light.on(); } else{ light.off(); } } }
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 笔试题目总结之一——TCP/IP协议栈
- Extjs4.2入门(1)
- 【C++ STL应用与实现】7: 如何使用std::forward_list 单链表 (since C++11)
- mongodb与mysql相比的优缺点
- 使用opencv识别同心圆
- 命令模式
- Google Analytics基本参数配置
- pod导入后,不提示第三方库头文件
- 图形图像系统学习
- 加密算法
- Android Studio设置内存大小
- Maven Notes
- C语言goto的应用直接跳出多层循环
- 实战c++中的智能指针unique_ptr系列-- unique_ptr的operator=、operator bool、reset、swap、get等介绍