java 行为模式 命令设计模式
2017-12-10 14:53
274 查看
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
命令模式的构成
1 客户角色:创建一个具体命令对象,并确定其接收者
2 命令角色:声明一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个接口或抽象类实现
3 具体命令角色:定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作
4 请求者角色:负责调用命令对象执行请求。
5 接收者角色:负责具体实施和执行一个请求
UML类图:
/**
* 命令(订单)
*/
public abstract class Command {
protected Receiver receiver;
public void setReceiver(Receiver receiver) {
this.receiver = receiver;
}
public abstract void execute();
}
命令模式的适用场景
对于大多数请求-响应模式的功能,比较适合使用命令模式,正如命令模式定义说的那样,命令模式对实现记录日志、撤销操作等功能比较方便。
命令模式的构成
1 客户角色:创建一个具体命令对象,并确定其接收者
2 命令角色:声明一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个接口或抽象类实现
3 具体命令角色:定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作
4 请求者角色:负责调用命令对象执行请求。
5 接收者角色:负责具体实施和执行一个请求
UML类图:
/**
* 命令(订单)
*/
public abstract class Command {
protected Receiver receiver;
public void setReceiver(Receiver receiver) {
this.receiver = receiver;
}
public abstract void execute();
}
package command; /** * 具体命令 */ public class ConcreateCommand extends Command { @Override public void execute() { receiver.action(); } }
package command; /** * 调用者(服务员) */ public class Invoker { private Command command; public void setCommand(Command command) { this.command = command; } public void ExecuteCommand(){ this.command.execute(); } }
package command; /** * 接受者(厨师) */ public class Receiver { public void action(){ System.out.println(" action ......"); } }
package command; public class client { public static void main(String[] args) { Receiver receiver = new Receiver(); Command commadn = new ConcreateCommand(); commadn.setReceiver(receiver); Invoker invoker = new Invoker(); invoker.setCommand(commadn); invoker.ExecuteCommand(); } }
//执行命令的接口 public interface Command { void execute(); } //命令接收者Receiver public class Tv { public int currentChannel = 0; public void turnOn() { System.out.println("The televisino is on."); } public void turnOff() { System.out.println("The television is off."); } public void changeChannel(int channel) { this.currentChannel = channel; System.out.println("Now TV channel is " + channel); } } //开机命令ConcreteCommand public class CommandOn implements Command { private Tv myTv; public CommandOn(Tv tv) { myTv = tv; } public void execute() { myTv.turnOn(); } } //关机命令ConcreteCommand public class CommandOff implements Command { private Tv myTv; public CommandOff(Tv tv) { myTv = tv; } public void execute() { myTv.turnOff(); } } //频道切换命令ConcreteCommand public class CommandChange implements Command { private Tv myTv; private int channel; public CommandChange(Tv tv, int channel) { myTv = tv; this.channel = channel; } public void execute() { myTv.changeChannel(channel); } } //可以看作是遥控器Invoker 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(); } } //测试类Client public class Client { public static void main(String[] args) { // 命令接收者Receiver Tv myTv = new Tv(); // 开机命令ConcreteCommond CommandOn on = new CommandOn(myTv); // 关机命令ConcreteCommond CommandOff off = new CommandOff(myTv); // 频道切换命令ConcreteCommond CommandChange channel = new CommandChange(myTv, 2); // 命令控制对象Invoker Control control = new Control(on, off, channel); // 开机 control.turnOn(); // 切换频道 control.changeChannel(); // 关机 control.turnOff(); } }
命令模式的适用场景
对于大多数请求-响应模式的功能,比较适合使用命令模式,正如命令模式定义说的那样,命令模式对实现记录日志、撤销操作等功能比较方便。
相关文章推荐
- java行为设计模式——命令模式
- Java设计模式(20)——行为模式之命令模式(Command)
- Java 设计模式之命令模式的详解(行为模式)
- java 设计模式-行为模式之命令模式
- java 设计模式-命令模式
- MVVM设计模式之旅 – 通用的命令附加行为
- java设计模式之命令模式Command
- Java设计模式_行为模式_观察者模式
- Java设计模式(16)--命令
- java 设计模式学习笔记十二 command命令设计模式
- java设计模式_命令模式 两个不同风格的实现
- java 命令模式 "处理行为" 经典范例
- java设计模式_命令模式 两个不同风格的实现
- Java设计模式八:命令模式(Command)
- Java设计模式——命令模式
- Java设计模式之行为模式
- Java设计模式之命令模式
- java设计模式_命令模式
- Java设计模式 Design Pattern:命令模式 Command Pattern
- java 设计模式学习笔记十二 command命令设计模式