网站空间500m是什么意思,中鑫华源建设投资集团网站,wordpress注册审批,邯郸房产网站文章目录 Java 设计模式之命令模式概述UML代码实现简单实现复杂实现 Java 设计模式之命令模式
概述
命令模式(Command)#xff1a;将一个请求封装为一个对象#xff0c;从而使你可用不同的请求对客户进行参数化#xff1b;对请求排队或记录请求日志#xff0c;以及支持可… 文章目录 Java 设计模式之命令模式概述UML代码实现简单实现复杂实现 Java 设计模式之命令模式
概述
命令模式(Command)将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销的操作。敏捷开发原则告诉我们不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式一般就不要着急去实现它事实上在需要的时候通过重构实现这个模式并不困难只有在真正需要如撤销恢复操作等功能时把原来的代码重构为命令模式才有意义。
UML Command命令接口定义执行操作的通用接口。ConcreteCommand具体命令类实现具体的命令操作持有接受者对象。Receiver接收者累实际执行操作的对象。Invoker调用者触发命令的对象。
代码实现
简单实现
定义命令接口
public interface Command {void execute();
}定义具体命令类
public class LightOffCommand implements Command {private Light light;public LightOffCommand(Light light) {this.light light;}Overridepublic void execute() {light.turnOff();}
}public class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) {this.light light;}Overridepublic void execute() {light.turnOn();}
}定义接收者类
public class Light {public void turnOn() {System.out.println(开灯);}public void turnOff() {System.out.println(关灯);}
}定义调用者类
public class RemoteControl {private Command command;public void setCommand(Command command) {this.command command;}public void pressButton() {command.execute();}
}使用
public class Client {public static void main(String[] args) {Light light new Light();Command lightOn new LightOnCommand(light);Command lightOff new LightOffCommand(light);RemoteControl control new RemoteControl();control.setCommand(lightOn);control.pressButton();control.setCommand(lightOff);control.pressButton();}
}输出
开灯
关灯复杂实现
定义抽象命令类
abstract class Command {protected RoastCook receiver;public Command(RoastCook receiver) {this.receiver receiver;}abstract void execute();
}定义接收者类
public class RoastCook {public void bakeMeet() {System.out.println(烤肉);}public void bakeFish() {System.out.println(烤鱼);}
}定义具体命令类
public class RoastFishCommand extends Command {public RoastFishCommand(RoastCook receiver) {super(receiver);}Overridevoid execute() {receiver.bakeFish();}
}public class RoastMeatCommand extends Command {public RoastMeatCommand(RoastCook receiver) {super(receiver);}Overridevoid execute() {receiver.bakeMeet();}
}定义调用者类
public class Waiter {private ArrayListCommand orders new ArrayList();private Command command;// 下单public void setOrder(Command command) {String className command.getClass().getSimpleName();if (className.equals(RoastFishCommand)) {System.out.println(下单 烤鱼);} else {System.out.println(下单 烤肉);}orders.add(command);}// 取消订单public void cancelOrder(Command command) {String className command.getClass().getSimpleName();if (className.equals(RoastFishCommand)) {System.out.println(取消 烤鱼);} else {System.out.println(取消 烤肉);}orders.remove(command);}// 通知public void notifyCommand() {for (Command command : orders) {command.execute();}}
}使用
public class Client {public static void main(String[] args) {RoastCook receiver new RoastCook();Command roastMeatCommand new RoastMeatCommand(receiver);Command roastFishCommand1 new RoastFishCommand(receiver);Command roastFishCommand2 new RoastFishCommand(receiver);Command roastFishCommand3 new RoastFishCommand(receiver);Waiter waiter new Waiter();waiter.setOrder(roastFishCommand1);waiter.setOrder(roastFishCommand2);waiter.setOrder(roastMeatCommand);waiter.setOrder(roastFishCommand3);waiter.cancelOrder(roastFishCommand2);waiter.notifyCommand();}
}输出
下单烤鱼
下单烤鱼
下单烤肉
下单烤鱼
取消烤鱼
烤鱼
烤肉
烤鱼