设计模式系列命令模式
原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。
命令模式是将"行为请求者"和"行为实现者"解耦开来。类似于我们通过开关控制家用电器。 举个例子
我们通过遥控器开关控制空调的开关,具体空调是如何关闭的和打开的我们是不清楚也不关心的,我们只需要把空调开关的命令,通过空调遥控器发送出去就可以了。
看一下 UML 图:
来看一下代码是如何实现的
先来定义一个抽象的 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
2022年中国五矿营收利润双创新高记者1月3日从中国五矿集团有限公司了解到,中国五矿2022年规模效益继续攀升,运营质量稳中有进,全年预计实现营业收入近9000亿元,同比增长9。2,利润总额净利润预计同比分别增长1
吉林省五地入选2022中国最美县域榜单2022中国最美县域榜单于2022年12月27日在第十八届中国(深圳)国际文化产业博览交易会上发布,全国102个县市区榜上有名。吉林省安图县长白县集安市抚松县珲春市等五县市上榜。据
中国煤都大同山西五千年的文化,想必很多人都听说过。山西是一座古老的城市,它的经济文化资源的分布都很好。煤炭大省,是山西省的代名词,但是有些人却不知道,山西并不是每一个地方都拥有着丰富的煤炭资源
2023金球奖最新概率排名姆巴佩能打败梅西拿到个人首座金球吗?金球奖在2022年发生了重大变化,评选时间范围从日历年改为遵循赛季周期,最终法国巨星本泽马赢得了金球奖,这是他首次获得该奖项。随着2022年的世界杯足坛已经划上了句号,新一届的金球
欧文开玩笑厌倦了大家伙轻视我的运动能力篮网在比赛中139103击败马刺,取得12连胜。赛后,篮网后卫凯里欧文接受了采访。比赛进行过程中,凯里欧文完成一记炸裂的单手战斧式补扣。谈到自己的补扣,欧文开玩笑表示我已经厌倦了更
国乒新一届领导班子确定!刘国梁致辞,国乒总教练和主教练有话说国乒新一届领导班子确定!刘国梁致辞,国乒总教练和主教练有话说今天让我们来共同讨论一下,有关于国乒近期发生的热点事件吧。相信不少对国乒赛事运动保持着关注的球迷粉丝都能够知道,就在近期
CBA最新积分榜宁波9分逆转上海2连胜垫底,广厦10089深圳进前8北京时间2023年1月3日,20222023赛季CBA常规赛第22轮第1比赛日继续进行,第22轮第1比赛日一共有3场比赛,具体战报信息如下江苏肯帝亚10195青岛国信水产宁波町渥1
恭喜!日本女排女神结婚多年终于升级当妈,丈夫不修边幅惹争议随着时间的推移,2022年女排超级联赛结束了半决赛首轮的较量,天津和上海两队先下一城,距离再度会师总决赛仅剩一步之遥。与此同时,国内排坛也有不少新的动态传出,江苏女排前任队长张常宁
刚刚,上海市政府出手了!为治理困扰国内职业足坛的各类乱象,打击并遏制俱乐部欠薪行为,中国足协于去年4月2日发布了中国足球协会关于2022赛季中超联赛中甲联赛中乙联赛相关工作的通知,明确了各职业足球俱乐部要
携程春节出境游搜索量成倍飙升,新加坡韩国中国香港等最热美通社消息12月27日,携程数据显示,中国内地出境机票订单环比26日同期有大幅上涨整体增加254。飞往新加坡韩国中国香港日本和泰国的航班数量激增,成为跨境限制首开后的五大最热门出境
废掉一个人最隐蔽的方式让他忙到没时间成长终究是阳康了,经历过五一和十一的人山人海,也就决定了节假日不去凑热闹。于是乎2023年的第一天哪儿也没去,最后选择了图书馆度日。无意中看到粥左罗的学会成长,看到一个与废掉一个人最快