当前位置: 首页 > wzjs >正文

定制型网站设计报价表榆林网站建设公司电话

定制型网站设计报价表,榆林网站建设公司电话,聊城阳谷网站建设,微信开放平台注销说明:本文介绍行为型设计模式之一的命令模式 定义 命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求方发出请求需要执行一个操作;接收方收到请求,并执行操作。命令模式解…

说明:本文介绍行为型设计模式之一的命令模式

定义

命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求方发出请求需要执行一个操作;接收方收到请求,并执行操作。命令模式解耦了请求方和接收方,请求方只需请求执行命令,不用关心命令怎样被接收、怎样被操作及是否被执行等。命令模式属于行为型设计模式。

(引自《设计模式就该这样学》P339)

灯泡开关设计

在实际生活中,发起命令和执行命令,大多是强绑定的,例如开车,一个操作对应就是一个反馈,但在程序设计上,考虑扩展性,就不能这样设计。

以灯泡开关为例,如下,是一个灯泡开关的设计

(灯泡,Bulb)

/*** 灯泡*/
public class Bulb {/*** 开灯*/public void on() {System.out.println("灯亮。。。");}/*** 关灯*/public void off() {System.out.println("灯灭。。。");}
}

(灯泡开关,Switcher)

/*** 开关*/
public class Switcher {/*** 定义灯泡*/private Bulb bulb;public Switcher(Bulb bulb) {this.bulb = bulb;}/*** 按下按钮*/public void buttonPush() {System.out.println("按下按钮");bulb.on();}/*** 弹起按钮*/public void buttonPop() {System.out.println("弹起按钮");bulb.off();}
}

(客户端使用,Client)

public class Client {public static void main(String[] args) {Bulb bulb = new Bulb();Switcher switcher = new Switcher(bulb);// 开灯switcher.buttonPush();;// 关灯switcher.buttonPop();}
}

如下

在这里插入图片描述

分析,以上代码就是关于灯泡开关的强绑定设计,开关只能对灯泡使用,灯泡只能被这个开关开启/关闭。


使用命令模式改进,如下,

(先定义一个命令接口,Command)

/*** 命令接口*/
public interface Command {/*** 执行*/void execute();/*** 反向执行*/void unexecute();
}

(灯泡命令,实现命令接口,BulbCommand)

/*** 灯泡命令*/
public class BulbCommand implements Command {/*** 定义灯泡*/private Bulb bulb;public BulbCommand(Bulb bulb) {this.bulb = bulb;}@Overridepublic void execute() {System.out.println("按下按钮");bulb.on();}@Overridepublic void unexecute() {System.out.println("弹起按钮");bulb.off();}
}

开关这里,不直接定义灯泡,而是定义命令,调用对应方法,如下

/*** 开关*/
public class Switcher {/*** 定义命令*/private Command command;/*** 设置命令*/public void setCommand(Command command) {this.command = command;}/*** 按下按钮*/public void buttonPush() {command.execute();}/*** 弹起按钮*/public void buttonPop() {command.unexecute();}
}

客户端使用

public class Client {public static void main(String[] args) {// 创建开关Switcher switcher = new Switcher();// 创建灯泡Bulb bulb = new Bulb();// 创建灯泡命令Command switcherCommand = new BulbCommand(bulb);// 绑定switcher.setCommand(switcherCommand);// 执行switcher.buttonPush();// 反向执行switcher.buttonPop();}
}

执行,改造完成

在这里插入图片描述

分析可以发现,命令模式,通过新增一个接口(Command),实现了命令与操作的解耦。基于改造后的代码,扩展灯泡亮起的实现方式,可以新建一个BulbCommand类,如NewBulbCommand,写新的实现逻辑,使用的时候直接调用setCommand(newBulbCommand)方法即可,而扩展其他使用场景,也只需定义新的对象、新的命令即可,非常灵活。

使用场景

在《设计模式就该这样学》(P340)这本书中,提到命令模式适用于以下场景:

(1)现实语义中具备“命令”的操作(如命令菜单、Shell命令等)。

(2)请求的调用者和接收者需要解耦,使得调用者和接收者不直接交互。

(3)需要抽象出等待执行的行为,比如撤销(Undo)操作和恢复(Redo)等操作。

即等待多久后,默认执行的场景,如红帽的Linux操作系统和MacOS操作系统,点击关机,1分钟未确认自动执行关机

(4)需要支持命令宏(即命令组合操作)。

即执行操作的命令来源不是单一的,可能来自多个

总结

本文介绍了行为型设计模式中的命令模式,参考《设计模式就该这样学》、《秒懂设计模式》两书,灯泡开关设计是《秒懂设计模式》中的举例。


文章转载自:

http://ravTX6KL.xhhqd.cn
http://ANSS4gTx.xhhqd.cn
http://SQKeBNrj.xhhqd.cn
http://fF3waWqL.xhhqd.cn
http://NeIS6Rux.xhhqd.cn
http://0w5NTgi6.xhhqd.cn
http://ba3gofyO.xhhqd.cn
http://MT2lxp5r.xhhqd.cn
http://hbIYTOcV.xhhqd.cn
http://mc0dFkRv.xhhqd.cn
http://FsKY77l8.xhhqd.cn
http://GMVbzgc6.xhhqd.cn
http://XNJhqqhp.xhhqd.cn
http://ueVle2zi.xhhqd.cn
http://Afski4ZZ.xhhqd.cn
http://aFWJo5me.xhhqd.cn
http://hwgcdWPz.xhhqd.cn
http://OPJ8HLMF.xhhqd.cn
http://EOZHZgfD.xhhqd.cn
http://68NNynOW.xhhqd.cn
http://9OtCcg4s.xhhqd.cn
http://AqAost2b.xhhqd.cn
http://T4rvEKDZ.xhhqd.cn
http://VfPcRiaQ.xhhqd.cn
http://LjRNxUAz.xhhqd.cn
http://yemaAbQu.xhhqd.cn
http://t9h5WBQB.xhhqd.cn
http://VqleUVdt.xhhqd.cn
http://JddQlBAw.xhhqd.cn
http://bNabD7xY.xhhqd.cn
http://www.dtcms.com/wzjs/749573.html

相关文章:

  • 网站开发一般要哪些开发工具wordpress多个主题
  • 织梦网站字体大小编程猫官网
  • 深圳 网站建设公一家专门做特产的网站
  • 学校自己做的网站需要买服务器吗做色流网站在哪买
  • 网络营销推广方法十种北京seo收费
  • 海外免费网站推广有哪些十堰市网络运营中心
  • 任丘市网站建设网站正在建设中 倒计时
  • 宜昌网站优化html购物网站
  • 免费网站建设翻译海外直播tiktok
  • 怎么注册自己网站吗做网站找 汇搜网络
  • 专业网站建设公司怎么做河南国基建设集团有限公司网站
  • 模板网站怎么建设优化地推app推广赚佣金
  • 网页广告投放搜索引擎推广seo
  • 网站优化推广费用群晖wordpress错乱
  • 电子商务网站建设题库网站诚信认证电话销售
  • 河北区网站建设建设购物网站费用
  • 建立中英文网站wordpress catchy
  • 成都网站公司建设一级消防工程师考试技巧
  • 做pc端网站流程上海手机网站建设多少钱
  • 网站开发行业资讯专业网站建设需要多少钱
  • 北大青鸟网站建设课程源码下载器
  • 做网站有没有受骗过精致的个人网站
  • 江苏省宿迁市建设局网站公司网站怎么登录
  • 网站建设审核需要多长时间wordpress rpc 评论
  • 零基础网站建设视频淘宝网站建设方案模板下载
  • 宣武郑州阳网站建设合肥网页设计就业
  • 教学成果奖网站建设百度点击软件还有用吗
  • 盐城网站开发厂商做数据的网站有哪些
  • 宜春个人网站建设起个娱乐网站名字
  • php网站建设带数据库模板什么是新闻源网站