命令模式
来源:互联网 发布:延保 知乎 编辑:程序博客网 时间:2024/06/04 18:25
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
命令模式涉及到五个角色,他们分别是:
- 客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确定其接收者。
- 命令(Command)角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个Java接口或Java抽象类实现。
- 具体(ConcreteCommand)命令角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。
- 请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
- 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
举个栗子:
假设电视机有三个操作:开机、关机和换台,可以将其看做是命令。电视机的遥控器相当于请求者(Invoker)的角色,操作者Sun相当于次系统的客户,电视机本身就是命令的接收者。代码如下:
操作者Sun类(客户角色):
package command;public class Sun{ public static void main(String[] args) { test(); } private static void test() { Tv myTv = new Tv(); OnCommand on = new OnCommand(myTv); OffCommand off = new OffCommand(myTv); ChannelCommand channel = new ChannelCommand(myTv, 2); Control control = new Control(on,off,channel); control.turnOn(); control.turnOff(); control.changeChannel(); }}
遥控器Control类(请求者角色):
package command;public class Control { private Command onCommand,offCommand,changeChannel; public Control(Command on, Command off, Command channel){ onCommand = on; offCommand = off; changeChannel = channel; } /** * 行动方法 */ public void turnOn(){ onCommand.execute(); } /** * 行动方法 */ public void turnOff(){ offCommand.execute(); } /** * 行动方法 */ public void changeChannel(){ changeChannel.execute(); }}
命令角色(Command):
package command;public interface Command { void execute();}
具体命令角色(ConcreteCommand):
开机OnCommand 类:
package command;public class OnCommand implements Command { private Tv myTv; public OnCommand(Tv tv){ myTv = tv; } /** * 执行方法 */ @Override public void execute() { myTv.turnOn(); }}
关机OffCommand 类:
package command;public class OffCommand implements Command { private Tv myTv; public OffCommand(Tv tv){ myTv = tv; } /** * 执行方法 */ @Override public void execute() { myTv.turnOff(); }}
换台ChannelCommand 类:
package command;public class ChannelCommand implements Command { private Tv myTv; private int channel; public ChannelCommand(Tv tv,int channel){ myTv = tv; this.channel = channel; } /** * 执行方法 */ @Override public void execute() { myTv.changeChannel(channel);; }}
电视机本身Tv 类(接收者角色):
package command;public class Tv { private int currentChannel= 0; /** * 行动方法 */ public void turnOn(){ System.out.println("The television is on."); } /** * 行动方法 */ public void turnOff(){ System.out.println("the television is off."); } /** * 行动方法 */ public void changeChannel(int channel){ currentChannel = channel; System.out.println("Now TV channel is" + channel); }}
源码链接:命令模式代码demo,欢迎下载
阅读全文
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 【SMS】SMS协议介绍之网络结构
- Python list常用方法
- PHP 模拟CURL分别GET POST进行HTTP请求
- [TXT][FC][按键修改教程]
- 解决动态库在Android平台加载时libavxcore.so: has text relocations错误
- 命令模式
- phpstorm环境搭建
- python classmethod和staticmethod
- Java Web学习笔记(一)Servlet
- Docker的三剑客
- 十六进制转十进制
- Oracle的Long类型转换为String类型的方法
- Dialog的实现与分类(不全)
- 单点登录原理与简单实现