设计模式——命令模式
来源:互联网 发布:跨域上传图片 java 编辑:程序博客网 时间:2024/05/31 19:38
命令模式:
将请求封装成对象,从而使用不同的请求、队列以及日志来参数化其他对象。命令对象支持可撤销的操作。命令对象将动作和接收者包进对象中。实现“行为请求者”与“行为实现者”解耦。
要点: 命令对象中动作和接收者被绑在一起,控制器调用命令对象的execute方法。
应用: 线程池、队列请求、日志请求。
3.定义命令接口
5.编写控制器,实现命令的调用
6.写完啦!!
将请求封装成对象,从而使用不同的请求、队列以及日志来参数化其他对象。命令对象支持可撤销的操作。命令对象将动作和接收者包进对象中。实现“行为请求者”与“行为实现者”解耦。
要点: 命令对象中动作和接收者被绑在一起,控制器调用命令对象的execute方法。
应用: 线程池、队列请求、日志请求。
类图:
以下程序模拟一个控制器对客厅的灯和车库的门进行控制。
1.定义灯
package net.dp.command.simpleremote; public class Light { public Light() { } public void on() { System.out.println("Light is on"); } public void off() { System.out.println("Light is off"); }}2.定义车库的门
package net.dp.command.simpleremote; public class GarageDoor { public GarageDoor() { } public void up() { System.out.println("Garage Door is Open"); } public void down() { System.out.println("Garage Door is Closed"); } public void stop() { System.out.println("Garage Door is Stopped"); } public void lightOn() { System.out.println("Garage light is on"); } public void lightOff() { System.out.println("Garage light is off"); }}
3.定义命令接口
package net.dp.command.simpleremote; public interface Command { public void execute();}4.实现命令接口
package net.dp.command.simpleremote; public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.on(); }}
package net.dp.command.simpleremote; public class LightOffCommand implements Command { Light light; public LightOffCommand(Light light) { this.light = light; } public void execute() { light.off(); }}
package net.dp.command.simpleremote; public class GarageDoorOpenCommand implements Command { GarageDoor garageDoor; public GarageDoorOpenCommand(GarageDoor garageDoor) { this.garageDoor = garageDoor; } public void execute() { garageDoor.up(); }}
5.编写控制器,实现命令的调用
package net.dp.command.simpleremote; //// This is the invoker//public class SimpleRemoteControl { Command slot; public SimpleRemoteControl() {} public void setCommand(Command command) { slot = command; } public void buttonWasPressed() { slot.execute(); }}
6.写完啦!!
package net.dp.command.simpleremote; public class RemoteControlTest { public static void main(String[] args) { SimpleRemoteControl remote = new SimpleRemoteControl(); Light light = new Light(); GarageDoor garageDoor = new GarageDoor(); LightOnCommand lightOn = new LightOnCommand(light); GarageDoorOpenCommand garageOpen = new GarageDoorOpenCommand(garageDoor); remote.setCommand(lightOn); remote.buttonWasPressed(); remote.setCommand(garageOpen); remote.buttonWasPressed(); }}
0 0
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式——命令设计模式
- 每日设计模式——命令模式
- 设计模式——命令模式(Commend)
- 设计模式——命令模式
- Java设计模式——命令模式
- JAVA设计模式——命令模式
- java设计模式——命令模式
- JAVA设计模式——命令模式
- 设计模式——命令模式
- 设计模式(12)——命令模式
- 设计模式——命令模式
- 设计模式——命令模式
- 设计模式——命令模式
- 设计模式——命令模式
- Codeforces Round #292 (Div. 2)C,D拓扑排序
- 关于使用WMI获取杀毒软件信息
- IE6 PNG透明终极解决方案
- C调用简单函数的反汇编分析记录
- 自学宝典:10个学习Android开发的网站推荐
- 设计模式——命令模式
- Ubuntu-14.04 安装 R 语言开发环境
- ArcGIS教程:网络分析图层的类型(三)
- 虚拟机下Ubuntu共享主机文件(Ubuntu、VMware、共享)
- 自定义视图
- 自满者,请三思而行
- HTML5基本元素使用
- 先从浅显看三层
- 【基础篇系列4】java核心(上)