欢迎大家来到IT世界,在知识的湖畔探索吧!
原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。
命令模式是将“行为请求者”和”行为实现者”解耦开来。类似于我们通过开关控制家用电器。
举个例子
我们通过遥控器开关控制空调的开关,具体空调是如何关闭的和打开的我们是不清楚也不关心的,我们只需要把空调开关的命令,通过空调遥控器发送出去就可以了。
看一下UML图:
欢迎大家来到IT世界,在知识的湖畔探索吧!
来看一下代码是如何实现的
先来定义一个抽象的Command类
public abstract class AirConditionCommand { abstract void execute(); }
欢迎大家来到IT世界,在知识的湖畔探索吧!
定义一个空调类,也就是命令的最终接收者,具体的命令接收者,实现各种具体的命令。
欢迎大家来到IT世界,在知识的湖畔探索吧!//命令的接收者 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(); } }
定义空调遥控器,直接使用空调打开命令
欢迎大家来到IT世界,在知识的湖畔探索吧!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
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/101896.html