命令模式(Command)—挤奶工挤奶
来源:互联网 发布:小米免费网络通信 编辑:程序博客网 时间:2024/04/29 00:58
定义:
命令模式属于对象的行为模式,又叫行动模式、交易模式。
命令模式把一个请求或者操作封装到一个对象中,命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
角色:
客户端(Client)角色:创建一个具体命令对象(ConcreteCommand),并确定接收者。
命令(Command)角色:声明一个给所有具体命令对象的接口。
具体命令(ConcreteCommand)角色:定义一个接收者与行为之间的弱耦合,调用接收者的执行方法。
请求者(Invoker)角色:负责调用命令对象执行相应的请求。
接收者(Receiver)角色:负责具体执行相应的操作。
例子:
养牛场都有挤奶器(MilkMachine),工人(Worker)通过操作面板(KeyBoard)来执行挤奶的工作,加入有两个简单操作,开始(PlayCommand) 停止(StopCommand),则整个链条就完整了。工人(Worker)是客户端角色,工人通过面板(KeyBoard)负责创建具体的命令对象,此时面板便是请求者角色,具体的命令对象就是开始、停止按钮,最后的接收者是挤奶器(MilkMachine)扮演接收者角色。
类图:
代码如下:
/** * 请求者角色 * 键盘类对象 * @author wang */public class KeyBoard {//持有命令对象private Command playCommand;private Command stopCommand;public void setPlayCommand(Command playCommand){this.playCommand = playCommand;}public void setStopCommand(Command stopCommand){this.stopCommand = stopCommand;}//执行启动命令public void play(){playCommand.execute();}//执行停止命令public void stop(){stopCommand.execute();}}/** * 命令角色 * @author wang */public interface Command {/** * 执行方法 */public void execute();}/** * 具体命令角色类 * 开始命令 * @author wang */public class PlayCommand implements Command { //持有接收者对象private MilkMachine milkMachine = null;//构造方法public PlayCommand(MilkMachine milkMachine){this.milkMachine = milkMachine;}public void execute() {// TODO Auto-generated method stub//调用接收者对象,执行操作 milkMachine.play();}}/** * 具体命令角色类 * 停止命令 * @author wang */public class StopCommand implements Command { //持有接收者对象private MilkMachine milkMachine = null;//构造方法public StopCommand(MilkMachine milkMachine){this.milkMachine = milkMachine;}public void execute() {// TODO Auto-generated method stub //调用接收者对象,执行操作milkMachine.stop();}}/** * 接收者角色 * 挤奶器类 * 负责执行操作 * @author wang */public class MilkMachine {public void play(){System.out.println("开始挤奶");}public void stop(){System.out.println("停止挤奶");}}/** * 客户端角色 * 挤奶工人类 * @author wang */public class Worker {public static void main(String args[]){//创建接收者对象MilkMachine milkMachine = new MilkMachine();//创建命令对象Command playCommand = new PlayCommand(milkMachine);Command stopCommand = new StopCommand(milkMachine);//创建请求者对象KeyBoard keyBoard = new KeyBoard();keyBoard.setPlayCommand(playCommand);keyBoard.setStopCommand(stopCommand);//测试keyBoard.play();keyBoard.stop();}}运行结果:
优点:
将请求的发起端与请求的执行端彻底的解耦。
0 0
- 命令模式(Command)—挤奶工挤奶
- 挤奶网格
- 从公牛身上挤奶
- [USACO Nov07] 挤奶时间
- [USACO13DEC]最优挤奶Optimal Milking(zkw写法)
- bzoj 1642: [Usaco2007 Nov]Milking Time 挤奶时间(DP)
- 不要从老鼠身上挤奶
- poj 2112最佳挤奶方案
- poj2112Optimal Milking(最优秀的挤奶方案)——floyd+最大流+二分
- poj 2112 floyd+最大流(所有牛挤奶走的最长路的最小值)
- bzoj 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 (二分+最大流)
- [BZOJ1733][Usaco2005 feb]Secret Milking Machine 神秘的挤奶机(二分+最大流)
- 【转】 不要从老鼠身上挤奶
- USACO1.2.1 Milking Cows 给奶牛挤奶
- poj2112,最大流,最优挤奶方案
- bzoj1642 [Usaco2007 Nov]Milking Time 挤奶时间
- ACM 156. [USACO Nov07] 挤奶时间(dp)
- [BZOJ1642] [Usaco2007 Nov]Milking Time 挤奶时间
- 【慕课笔记】第六章 数组 第3节 使用循环操作JAVA中的数组
- Android.mk 文件语法详解
- C#笔试题收集
- Androidx学习笔记(14)-- Android文件的访问权限
- iOS开发拓展篇—静态库
- 命令模式(Command)—挤奶工挤奶
- Web性能压力测试工具之WebBench详解
- 2.1 项目的整体架构,项目搭建,也叫做 系统设计
- Python 高级特性之 lambda
- openwrt 编译过程
- HDOJ 2031 进制转换
- 让Activity在Android5.0上全屏
- Linux 常用命令
- iOS图片拉伸技巧