如果用命令模式打开西游记会发生什么

简介: 如果用命令模式打开西游记会发生什么

在打开西游记之前,我先介绍下命令模式

命令模式介绍

思想

命令模式的功能是将一个请求或者操作包装在一个对象中,并将参数传递给调用对象,从而使方法和调用者的职责分离。

优点

这么做的好处一方面使系统变得松藕,另一方面可以根据不通过的请求对客户进行参数化调用,从而使整个系统具有更高的灵活性。

缺点

因为事务的复杂度可能会出现很多的类

需要使用命令模式的场景

命令模式的使用场景有

  1. 需要根据参数确定执行哪个方法时
  2. 需要随时追踪撤销或者重做某些操作时(即事务场景)

模型

image.png

命令模式需要的角色分别是:Client(客户端)Invoker(调用者)Commond(命令接口)concreteCommand(具体的命令)Receiver(接受者)

  • Client(客户端):具体的使用者,一般通过调用者执行客户端想要做的事情
  • Invoker(调用者):接收命令,并且执行这些命令
  • Commond(命令接口):规定具体的命令需要实现的接口
  • concreteCommand(具体的命令):具体的命令,需要实现命令接口
  • Receiver(接受者):正在执行命令的类

实现

源码点这里

class Receiver {
  constructor (name, specialSkill) {
    this.name = name
    this.specialSkill = specialSkill
  }
  useSpecialSkill () {
    console.log(
      this.name,
      '双手合十,口念:“阿弥陀佛”,随后使出了他的看家本领',
      this.specialSkill
    )
  }
}
class Invoker {
  constructor () {
    this.commmandList = []
  }
  addCommand (command) {
    console.log('如来说:亲,你点的', command.receiver.name, '给你安排了')
    this.commmandList.push(command)
  }
  excuteCommand () {
    console.log('如来捏了个兰花指,然后打了个响指空空、戒戒、沙沙分别走了上来')
    this.commmandList.map(command => command.excute())
  }
}
class Command {
  constructor (receiver) {
    console.log('"给我来一个', receiver.name, '"')
    this.receiver = receiver
  }
  excute () {
    this.receiver.useSpecialSkill()
  }
}
// client 客户端
console.log('夕阳西下,唐唐拖着长长的背影,走进了灵山白金翰佛堂。')
console.log('几个苦行僧打扮的服务员迎了上来,双手合十,鞠躬道:“阿弥陀佛,施主想来些啥?”')
console.log('唐唐嚣张的骂道:“啥档次,跟我一样说阿弥陀佛,把你们老板叫出来!”')
console.log('如来听到唐唐的声音,边穿衣服边对身边的白骨精说道:“你稍等片刻,我去去就来”。随后夺门而出。')
console.log('如来迎了上啦,拉住唐唐的手道:')
console.log('老弟好久没来了啊,有失远迎,还请见谅啊!!!')
console.log('“我佛慈悲,出家人怎会计较这些,弟子马上要出发了,来这里买几个徒弟,路上消遣,岂不美哉”')
console.log('如来从身后拿出了ipad,递给唐唐,“你选吧”')
console.log('唐唐接过平板,看着每页的图片,边点边念叨到:')
const kongkong = new Receiver('空空', '连续72个后空翻')
const jiejie = new Receiver('戒戒', '36种不同姿势钢管舞')
const shasha = new Receiver('沙沙', '萨克斯')
// 给我来一个空空,我看看他的看家本领怎么样
const command1 = new Command(kongkong)
// 再给我来一个戒戒,我想看看他的看家本领怎么样
const command2 = new Command(jiejie)
// 最后再给我来一个沙沙,我想看看他的看家本领怎么样
const command3 = new Command(shasha)
// 如来
const invoker = new Invoker()
// 如来说:亲,你要一个空空、沙沙、戒戒,分别看看他的看家本领,好的,给你安排了
invoker.addCommand(command1)
invoker.addCommand(command2)
invoker.addCommand(command3)
console.log('唐唐:”好的,这些我先看看他们的本领怎么样“')
// 如来翘起了兰花指,然后打了个响指,空空、戒戒、沙沙分别走了上来
invoker.excuteCommand()
console.log('唐唐满意的点了点头:”好的,爷不差钱,这些个挺不错的,俺都要了!!!“')
console.log('如来说:“如果觉得好用,回头记得一键三连哦~”')

如果用命令模式打开西游记会发生什么,你会欣赏到下面的小短文

夕阳西下,唐唐拖着长长的背影,走进了灵山白金翰佛堂。

几个苦行僧打扮的服务员迎了上来,双手合十,鞠躬道:“阿弥陀佛,施主想来些啥?”

唐唐嚣张的骂道:“啥档次,跟我一样说阿弥陀佛,把你们老板叫出来!”

如来听到唐唐的声音,边穿衣服边对身边的白骨精说道:“你稍等片刻,我去去就来”。随后夺门而出。

如来迎了上来,拉住唐唐的手道:

"老弟好久没来了啊,有失远迎,还请见谅啊!!!"

“我佛慈悲,出家人怎会计较这些,弟子马上要出发了,来这里买几个徒弟,路上消遣,岂不美哉”

如来从身后拿出了ipad,递给唐唐,“你选吧”

唐唐接过平板,翻着精美的图片,边点边念叨到:

"给我来一个 空空 "

"给我来一个 戒戒 "

"给我来一个 沙沙 "

如来说:亲,你点的 空空 给你安排了

如来说:亲,你点的 戒戒 给你安排了

如来说:亲,你点的 沙沙 给你安排了

唐唐:”好的,这些我先看看他们的本领怎么样“

如来捏了个兰花指,然后打了个响指空空、戒戒、沙沙分别走了上来

空空 双手合十,口念:“阿弥陀佛”,随后使出了他的看家本领 连续72个后空翻

戒戒 双手合十,口念:“阿弥陀佛”,随后使出了他的看家本领 36种不同姿势钢管舞

沙沙 双手合十,口念:“阿弥陀佛”,随后使出了他的看家本领 萨克斯


唐唐满意的点了点头:”好的,爷不差钱,这些个挺不错的,俺都要了!!!“

如来说:“如果觉得好用,回头记得一键三连哦~”


相关文章
|
4月前
|
Windows
鱼皮的剪切助手怎样用?用的时候,按Ctrl + C进行复制,剪切助手的粘贴是Ctrl + O
鱼皮的剪切助手怎样用?用的时候,按Ctrl + C进行复制,剪切助手的粘贴是Ctrl + O
|
4月前
|
前端开发 C语言
C语言08----注释扩展知识点,注释快捷键:ctrl+k,ctrl + C,取消快捷键 ctrl + K,ctrl + U
C语言08----注释扩展知识点,注释快捷键:ctrl+k,ctrl + C,取消快捷键 ctrl + K,ctrl + U
|
6月前
|
Shell 定位技术 开发工具
[oeasy]python0015_键盘改造_将esc和capslock对调_hjkl_移动_双手正位
[oeasy] python0015_键盘改造_将 esc 和 capslock 对调_hjkl_移动_双手正位
53 3
|
6月前
【烦人的问题】有一天发现VSCode中自己的鼠标选择老是跨行选择多段代码,怎么都改不回来,而且用alt+shift+鼠标都无法切换,肿么办?
【烦人的问题】有一天发现VSCode中自己的鼠标选择老是跨行选择多段代码,怎么都改不回来,而且用alt+shift+鼠标都无法切换,肿么办?
|
6月前
|
设计模式 物联网 关系型数据库
掌握命令模式-解锁软件设计的‘遥控器’
本文首先通过场景案例展示了不使用设计模式的传统实现方式,指出其存在的问题,如代码耦合度高、扩展性差等。随后,文章详细介绍了命令模式的核心结构和原理,并通过示例代码展示了如何使用命令模式重构案例,有效解决了传统实现方式中的问题。在回顾与展望部分,文章总结了命令模式的优点,如降低耦合性、提高扩展性和灵活性,同时也探讨了其可能存在的缺点,如增加系统复杂性。最后,文章还讨论了命令模式的应用场景,并对未来的发展趋势进行了展望。
61 0
掌握命令模式-解锁软件设计的‘遥控器’
|
设计模式 存储 调度
2023-7-10-第十五式命令模式
2023-7-10-第十五式命令模式
79 0
word 使用中遇到的小细节2(粘贴图片到Word中显示只有一小部分和按空格键后面字不见)
word 使用中遇到的小细节2(粘贴图片到Word中显示只有一小部分和按空格键后面字不见)
245 0
word 使用中遇到的小细节2(粘贴图片到Word中显示只有一小部分和按空格键后面字不见)
|
存储 数据处理 流计算
代码太长怎么办?试试命令模式(上)
代码太长怎么办?试试命令模式(上)
236 0
代码太长怎么办?试试命令模式(上)
笔记本光标乱跳是什么原因
原因和解决方法:可能是打字时手掌碰到了电脑的触控板,可以将触控板锁定再打字;可能是鼠标出现故障;可以更换鼠标。 电脑使用技巧:1、电脑可以管理外接设备,比如在电脑插入耳机后,会弹出“Realtek高清音频管理器”对话框,可以设置相关参数。
“华硕zx50j,键盘背光灯无法显示,fn组合键不可用”解决办法
“华硕zx50j,键盘背光灯无法显示,fn组合键不可用”解决办法
357 0
“华硕zx50j,键盘背光灯无法显示,fn组合键不可用”解决办法