如果用命令模式打开西游记会发生什么
在打开西游记之前,我先介绍下命令模式
命令模式
介绍
思想
命令模式
的功能是将一个请求
或者操作
包装在一个对象中,并将参数传递给调用对象,从而使方法和调用者的职责分离。
优点
这么做的好处一方面使系统变得松藕,另一方面可以根据不通过的请求对客户进行参数化调用,从而使整个系统具有更高的灵活性。
缺点
因为事务
的复杂度可能会出现很多的类
需要使用命令模式的场景
命令模式
的使用场景有
- 需要根据参数确定执行哪个方法时
- 需要随时
追踪
、撤销
或者重做
某些操作时(即事务
场景)
模型
命令模式需要的角色分别是: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种不同姿势钢管舞
沙沙 双手合十,口念:“阿弥陀佛”,随后使出了他的看家本领 萨克斯
唐唐满意的点了点头:”好的,爷不差钱,这些个挺不错的,俺都要了!!!“
如来说:“如果觉得好用,回头记得一键三连哦~”