设计模式随笔-锦囊妙计
为什么80%的码农都做不了架构师?>>>
话说《三国演义》中,周瑜与孙权定下计谋,以孙权之妹为诱饵,骗刘备过江到东吴招亲,想 趁机杀害刘备,索回荆州。诸葛亮早识破了诡计,令武将赵云随同并护卫刘备前往,并给赵云了三个锦囊,嘱咐他依次执行即可。结果,赵云按照诸葛亮的锦囊妙计 行事,不仅帮助刘备将孙权之妹孙尚香夫人迎娶回来,还得到孙权之母吴国太的欢心,陪同刘备夫妇回了荆州。《三国演义》这段记叙,为后世创造了“锦囊妙计” 和“赔了夫人又折兵”两个成语。
今天,我就“锦囊妙计”来说说Command模式。从面向对象的设计角度来说,锦囊妙计有以下几个特色:
1、妙计被装入锦囊后都变得一般模样,没有任何区别。
2、锦囊妙计自己是无法实施的,必须由某个人依计行事。
3、实施者有权利选择执行命令或不执行命令,也可以选择在什么时候执行。当然,在我们的故事中,赵云在合适的时间执行了合适的妙计,便为我们留下了精彩的故事。
这个故事用代码书写出来如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
“命 令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象”。通过将妙计封装成锦囊妙计,便成为可委派的妙计。由一个对 象(ZhuGeLiang)创建并封装,然后传递给另一个对象(ZhaoYun),命令在此没有被立即执行,而是Enqueue了。当条件合适的时候,再 将命令解开执行。另外,所有的锦囊妙计都有一个共同的特性,就是可以被执行。所以,赵云不用关心这个锦囊与那个锦囊有什么区别,只需执行便是了。
该例子仅仅取了一个Command模式的“意”,丢弃了Command模式的形。设计模式的应用无需过于死板。如果对Command模式感兴趣,可以访问《设计模式(18)-Command Pattern》
转载于:https://my.oschina.net/qihh/blog/57820
设计模式随笔-锦囊妙计相关推荐
- 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
原文地址为: 设计模式随笔系列:鸭子-策略模式(Strategy)[原] 鸭子-策略模式(Strategy) 前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所 ...
- 设计模式随笔系列:鸭子-策略模式(Strategy)
鸭子-策略模式(Strategy) 前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜 ...
- 无招胜有招——面向对象设计模式随笔,
最近在学习面向对象设计模式,GOF的23种设计模式大概看了一遍,简单总结一下,设计模式主要分为三种模式,分别是创建模式,结构模式,行为模式. 回过头想一下具体有哪些模式,在什么情况下用什么设计模式,好 ...
- 设计模式随笔-用奶箱订报纸
为什么80%的码农都做不了架构师?>>> 几天前给学生上课,一个学生问我用Delegate与Event实现Observer模式与不用它们实现到底有什么区别?我便讲了一个用奶箱订报纸的 ...
- 大话设计模式(十四 设计模式不能戏说!设计模式怎就不能戏说?)
(续上篇) 次日,小菜来到大鸟处. "大鸟,你在写什么东西?"小菜看到大鸟的电脑上开着记事本. "哦,我打算写篇博客,名字就叫<设计模式 ...
- [活动]《博客园精华集》设计模式分册第2轮筛选结果公示
说明 <博客园精华集>设计模式分册第2论筛选结果,总共有284篇,主要由TerryLee.idior.怪怪三人完成.在经过第三轮打分之后,还会有很多的文章出局.请大家发现以下文章中有转载或 ...
- 《设计模式》(精华集)
Web Client Software Factory系列(3):View-Presenter模式作者: TerryLee .NET设计模式(18):迭代器模式(Iterator Pattern)作者 ...
- 设计模式(博客园精化集)〈转〉
转自:http://blog.csdn.net/tuwen/archive/2011/03/04/6224179.aspx Web Client Software Factory系列(3):View- ...
- 《设计模式》(博客园精华集)
转自:http://archive.cnblogs.com/a/1720782/ 在此非常感谢谢博主 圣殿骑士 Web Client Software Factory系列(3):View-Prese ...
最新文章
- Oracle全文检索示例
- boost::dynamic_bitset模块的测试程序
- php优先级,PHP运算优先级——神一般的设定
- 猎户星空否认停发高管薪资:无论遭遇怎样困难 都不会苛扣员工薪酬
- 力扣题目系列:605. 种花问题
- latex减少图片和图片解释文字之间的距离
- windows 2003 iis php,windows 2003 iis安装php 5.2版本步骤
- 欺骗的艺术.资料搜集自互联网.
- 微信浏览器禁止下载的处理方法-跳转浏览器打开
- LM2903器件使用说明
- 计算机冗余,计算机中的冗余是什么意思
- 无线路由器连接电信光猫实现拨号上网方法
- win10下yolov3训练自己的数据集
- Asterisk修改call file源代码(pbx_spool.c)以支持邀请PJSIP webrtc分机
- 达内java培优训练营 2106班
- 嵌入式Linux系统的电子书阅读器项目1——Overview
- 小程序需要买ssl数字证书吗
- CodeForces - 298B Sail (思维题)
- 解决SSD+HDD双硬盘下电脑卡顿问题,CPU和内存使用率低,电脑依旧卡顿
- 宁以pass-by-reference-to-const替换pass-by-value——effective c++学习笔记
热门文章
- leetcode:Add Two Numbers(java)
- Linux PAM 验证
- linux 扩展pam支持第三方认证
- [copy-webpack-plugin] unable to locate的错误解决
- Threejs系列--11游戏开发--沙漠赛车游戏【初步加载地面】
- 家用路由器AP模式设置
- python tkinter Button的使用
- 微分几何笔记(2):微分流形的例子
- 【23届秋招总结系列】一个普本23届小学弟的秋招总结,上岸金山云开发(云计算方向)
- NOIP是什么?全国青少年信息学奥林匹克联赛各区特派员联系名单大全!