常用设计模式实战(设计模式系列命令模式)

原创:花括号MC(huakuohao-mc),欢迎分享,转载请保留出处。

命令模式是将“行为请求者"和"行为实现者"解耦开来。类似于我们通过开关控制家用电器。

举个例子

我们通过遥控器开关控制空调的开关,具体空调是如何关闭的和打开的我们是不清楚也不关心的,我们只需要把空调开关的命令,通过空调遥控器发送出去就可以了。

看一下UML图:

常用设计模式实战(设计模式系列命令模式)(1)

来看一下代码是如何实现的

先来定义一个抽象的Command类

public abstract class AirConditionCommand { abstract void execute(); }

定义一个空调类,也就是命令的最终接收者,具体的命令接收者,实现各种具体的命令。

//命令的接收者 public class AirCondition { public void on(){ System.out.println("AirCondition is On"); } public void off(){ System.out.println("AirCondition is Off "); } }

打开空调的命令类,继承自抽象的Command类

public class AirConditionOnCommand extends AirConditionCommand { //关联具体命令接收者 AirCondition airCondition; public AirConditionOnCommand(AirCondition airCondition) { this.airCondition = airCondition; } @Override void execute() { airCondition.on(); } }

定义空调遥控器,直接使用空调打开命令

public class AirConditionControl { AirConditionCommand airConditionCommand; public void setAirConditionCommand(AirConditionCommand airConditionCommand) { this.airConditionCommand = airConditionCommand; } public void buttonOn(){ //直接调用空调打开命令 airConditionCommand.execute(); } }

客户端这样使用

public class CommandDemo { public static void main(String[] args){ //invoker 命令调用者 AirConditionControl conditionControl = new AirConditionControl(); //请求的接收者 AirCondition airCondition = new AirCondition(); //创建一个命令,并把命令接收者传进去 AirConditionCommand commandOn = new AirConditionOnCommand(airCondition); //将命令传给调用者 conditionControl.setAirConditionCommand(commandOn); //通过开关打开空调 conditionControl.buttonOn(); } }

总结

命令模式是行为模式之一,是使用频率比较高的一种模式,命令模式的关键就是把请求操作的对象和具体执行这个操作的对象分离开来,就像开关和空调一样。

本文参考 https://www.tutorialspoint.com/design_pattern/command_pattern.htm

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页