关于23种设计模式的有趣见解

访问 世 纪 流年 BLOG 站 时 看到的一段文字, 对设计 模式的解 释 很 风 趣,能 够让 人很快的了解其含 义 ,学到了不少 东 西,以下是文章的内容:

对设计 模式很有意思的 诠释 ,呵呵,原作者不 详 。

创 建型模式  

1 、 FACTORY— 追 MM 少不了 请 吃 饭 了,麦当 劳 的 鸡 翅和肯德基的 鸡 翅都是 MM 爱 吃的 东 西, 虽 然口味有所不同,但不管你 带 MM 去麦当 劳 或肯德基,只管向服 务员说 “ 来四个 鸡 翅 ” 就行了。麦当 劳 和肯德基就是生 产鸡 翅的 Factory 

工厂模式:客 户类 和工厂 类 分 开 。消 费 者任何 时 候需要某 种产 品,只需向工厂 请 求即可。消 费 者无 须 修改就可以接 纳 新 产 品。缺点是当 产 品修改 时 ,工厂 类 也要做相 应 的修改。如:如何 创 建及如何向客 户 端提供。  

2 、 BUILDER—MM 最 爱 听的就是 “ 我 爱 你 ” 这 句 话 了, 见 到不同地方的 MM, 要能 够 用她 们 的方言跟她 说这 句 话 哦,我有一个多 种语 言翻 译 机,上面 每种语 言都有一个按 键 , 见 到 MM 我只要按 对应 的 键 ,它就能 够 用相 应 的 语 言 说 出 “ 我 爱 你 ” 这 句 话 了,国外的 MM 也可以 轻 松搞掂, 这 就是我的 “ 我 爱 你 ”builder 。( 这 一定比美 军 在伊拉克用的 翻 译 机好 卖 )  

建造模式:将 产 品的内部表象和 产 品的生成 过 程分割 开 来,从而使一个建造 过 程生成具有不同的内部表象的 产 品 对 象。建造模式使得 产 品内部表象可以独立的 变 化,客 户 不必知道 产 品内部 组 成的 细节 。建造模式可以 强 制 实 行一 种 分 步骤进 行的建造 过 程。  

3 、 FACTORY METHOD— 请 MM 去麦当 劳 吃 汉 堡,不同的 MM 有不同的口味,要 每 个都 记 住是一件 烦 人的事情,我一般采用 Factory Method 模式, 带 着 MM 到服 务员 那儿, 说 “ 要一个 汉 堡 ” ,具体要什 么样 的 汉 堡呢, 让 MM 直接跟服 务员说 就行了。  

工厂方法模式:核心工厂 类 不再 负责 所有 产 品的 创 建,而是将具体 创 建的工作交 给 子 类 去做,成 为 一个抽象工厂角色, 仅负责给 出具体工厂 类 必 须实现 的接口,而不接触哪一个 产 品 类应 当被 实 例化 这种细节 。  

4 、 PROTOTYPE— 跟 MM 用 QQ 聊天,一定要 说 些深情的 话语 了,我搜集了好多肉麻的情 话 ,需要 时 只要 copy 出来放到 QQ 里面就行了, 这 就是我的情 话 prototype 了。( 100 块钱 一份,你要不要)  

原始模型模式:通 过给 出一个原型 对 象来指明所要 创 建的 对 象的 类 型,然后用 复 制 这 个原型 对 象的方法 创 建出更多同 类 型的 对 象。原始模型模式允 许动态 的增加或减少 产 品 类 , 产 品 类 不需要非得有任何事先确定的等 级结 构,原始模型模式适用于任何的等 级结 构。缺点是 每 一个 类 都必 须 配 备 一个克隆方法。  

5 、 SINGLETON— 俺有 6 个漂亮的老婆,她 们 的老公都是我,我就是我 们 家里的老公 Sigleton ,她 们 只要 说 道 “ 老公 ” ,都是指的同一个人,那就是我 ( 刚 才做了个梦啦,哪有 这么 好的事 ) 

单 例模式: 单 例模式确保某一个 类 只有一个 实 例,而且自行 实 例化并向整个系 统 提供 这 个 实 例 单 例模式。 单 例模式只 应 在有真正的 “ 单 一 实 例 ” 的需求 时 才可使用。  

结 构型模式  

6 、 ADAPTER— 在朋友聚会上碰到了一个美女 Sarah ,从香港来的,可我不会 说 粤 语 ,她不会 说 普通 话 ,只好求助于我的朋友 kent 了,他作 为 我和 Sarah 之 间 的 Adapter , 让 我和 Sarah 可以相互交 谈 了 ( 也不知道他会不会耍我 ) 

适配器( 变压 器)模式:把一个 类 的接口 变换 成客 户 端所期待的另一 种 接口,从而使原本因接口原因不匹配而无法一起工作的两个 类 能 够 一起工作。适配 类 可以根据参数返 还 一个合适的 实 例 给 客 户 端。  

7 、 BRIDGE— 早上碰到 MM ,要 说 早上好, 晚 上碰到 MM ,要 说晚 上好;碰到 MM 穿了件新衣服,要 说 你的衣服好漂亮哦,碰到 MM 新做的 发 型,要 说 你的 头发 好漂亮哦。不要 问 我 “ 早上碰到 MM 新做了个 发 型怎 么说 ” 这种问题 ,自己用 BRIDGE 组 合一下不就行了  

桥 梁模式:将抽象化与 实现 化脱耦,使得二者可以独立的 变 化,也就是 说 将他 们 之 间 的 强关联变 成弱 关联 ,也就是指在一个 软 件系 统 的抽象化和 实现 化之 间 使用 组 合 / 聚合 关 系而不是 继 承 关 系,从而使两者可以独立的 变 化。  

8 、 COMPOSITE—Mary 今天 过 生日。 “ 我 过 生日,你要送我一件礼物。 ”“ 嗯 ,好吧,去商店,你自己挑。 ”“ 这 件 T 恤挺漂亮, 买 , 这 条裙子好看, 买 , 这 个包 也不 错 , 买 。 ”“ 喂, 买 了三件了呀,我只答 应 送一件礼物的哦。 ”“ 什 么 呀, T 恤加裙子加包包,正好配成一套呀,小姐,麻 烦 你包起来。 ”“……” , MM 都会用 Composite 模式了,你会了没有?  

合成模式:合成模式将 对 象 组织 到 树结 构中,可以用来描述整体与部分的 关 系。合成模式就是一个 处 理 对 象的 树结 构的模式。合成模式把部分与整体的 关 系用 树结 构表示出来。合成模式使得客 户 端把一个个 单 独的成分 对 象和由他 们复 合而成的合成 对 象同等看待。  

9 、 DECORATOR—Mary 过 完 轮 到 Sarly 过 生日, 还 是不要叫她自己挑了,不 然 这 个月伙食 费 肯定玩完,拿出我去年在 华 山 顶 上照的照片,在背面写上 “ 最好的的礼物,就是 爱 你的 Fita” ,再到街上礼品店 买 了个像框( 卖 礼品的 MM 也很漂亮哦),再找隔壁搞美 术设计 的 Mike 设计 了一个漂亮的盒子装起来 …… ,我 们 都是 Decorator ,最 终 都在修 饰 我 这 个人呀,怎 么样 ,看懂了 吗 ?  

装 饰 模式:装 饰 模式以 对 客 户 端透明的方式 扩 展 对 象的功能,是 继 承 关 系的一个替代方案,提供比 继 承更多的灵活性。 动态给 一个 对 象增加功能, 这 些功能可以再 动态 的撤消。增加由一些基本功能的排列 组 合而 产 生的非常大量的功能。  

10 、 FACADE— 我有一个 专业 的 Nikon 相机,我就喜 欢 自己手 动调 光圈、快 门 , 这样 照出来的照片才 专业 ,但 MM 可不懂 这 些,教了半天也不会。幸好相机有 Facade 设计 模式,把相机 调 整到自 动 档,只要 对 准目 标 按快 门 就行了,一切由相机自 动调 整, 这样 MM 也可以用 这 个相机 给 我拍 张 照片了。  

门 面模式:外部与一个子系 统 的通信必 须 通 过 一个 统 一的 门 面 对 象 进 行。 门 面模式提供一个高 层 次的接口,使得子系 统 更易于使用。 每 一个子系 统 只有一个 门 面 类 ,而且此 门 面 类 只有一个 实 例,也就是 说 它是一个 单 例模式。但整个系 统 可以有多个 门 面 类 。  

11 、 FLYWEIGHT— 每 天跟 MM 发 短信,手指都累死了,最近 买 了个新手机,可以把一些常用的句子存在手机里,要用的 时 候,直接拿出来,在前面加上 MM 的名字就可以 发 送了,再不用一个字一个字敲了。共享的句子就是 Flyweight , MM 的名字就是提取出来的外部特征,根据上下文情况使用。  

享元模式: FLYWEIGHT 在拳 击 比 赛 中指最 轻 量 级 。享元模式以共享的方式高效的支持大量的 细 粒度 对 象。享元模式能做到共享的 关键 是区分内 蕴 状 态 和外 蕴 状 态 。内 蕴 状 态 存 储 在享元内部,不会随 环 境的改 变 而有所不同。外 蕴 状 态 是随 环 境的改 变 而改 变 的。外 蕴 状 态 不能影响内 蕴 状 态 ,它 们 是相互独立的。将可以共享的状 态 和不可以共享的状 态 从常 规类 中区分 开 来,将不可以共享的状 态 从 类 里剔除出去。客 户 端不可以直接 创 建被共享的 对 象,而 应 当使用一个工厂 对 象 负责创 建被共享的 对 象。享元模式大幅度的降低内存中 对 象的数量。  

12 、 PROXY— 跟 MM 在网上聊天,一 开头总 是 “hi, 你好 ”,“ 你从哪儿来呀? ”“ 你多大了? ”“ 身高多少呀? ” 这 些 话 ,真 烦 人,写个程序做 为 我的 Proxy 吧,凡是接收到 这 些 话 都 设 置好了自 动 的回答,接收到其他的 话时 再通知我回答,怎 么样 ,酷吧。  

代理模式:代理模式 给 某一个 对 象提供一个代理 对 象,并由代理 对 象控制 对 源 对 象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行 动 。某些情况下,客 户 不想或者不能 够 直接引用一个 对 象,代理 对 象可以在客 户 和目 标对 象直接起到中介的作用。客 户 端分辨不出代理主 题对 象与真 实 主 题对 象。代理模式可以并不知道真正的被代理 对 象,而 仅仅 持有一个被代理 对 象的接口, 这时 候代理 对 象不能 够创 建被代理 对 象,被代理 对 象必 须 有系 统 的其他角色代 为创 建并 传 入。  

行 为 模式  

13 、 CHAIN OF RESPONSIBLEITY— 晚 上去上英 语课 , 为 了好 开 溜坐到了最后一排,哇,前面坐了好几个漂亮的 MM 哎,找 张纸 条,写上 “Hi, 可以做我的女朋友 吗 ?如果不愿意 请 向前 传 ” , 纸 条就一个接一个的 传 上去了,糟糕, 传 到第一排的 MM 把 纸 条 传给 老 师 了,听 说 是个老 处 女呀,快跑 ! 

责 任 链 模式:在 责 任 链 模式中,很多 对 象由 每 一个 对 象 对 其下家的引用而接  

起来形成一条 链 。 请 求在 这 个 链 上 传递 ,直到 链 上的某一个 对 象决定 处 理此 请 求。客 户 并不知道 链 上的哪一个 对 象最 终处 理 这 个 请 求,系 统 可以在不影响客 户 端的情况下 动态 的重新 组织链 和分配 责 任。 处 理者有两个 选择 :承担 责 任或者把 责 任推 给 下家。一个 请 求可以最 终 不被任何接收端 对 象所接受。  

14 、 COMMAND— 俺有一个 MM 家里管得特 别严 ,没法 见 面,只好借助于她弟弟在我 们俩 之 间传 送信息,她 对 我有什 么 指示,就写一 张纸 条 让 她弟弟 带给 我。 这 不,她弟弟又 传 送 过 来一个 COMMAND , 为 了感 谢 他,我 请 他吃了碗 杂酱 面,哪知道他 说 : “ 我同 时给 我姐姐三个男朋友送 COMMAND ,就数你最小气,才 请 我吃面。 ” , :-( 

命令模式:命令模式把一个 请 求或者操作封装到一个 对 象中。命令模式把 发 出命令的 责 任和 执 行命令的 责 任分割 开 ,委派 给 不同的 对 象。命令模式允 许请 求的一方和 发 送的一方独立 开 来,使得 请 求的一方不必知道接收 请 求的一方的接口,更不必知道 请 求是怎 么 被接收,以及操作是否 执 行,何 时 被 执 行以及是怎 么 被 执 行的。系 统 支持命令的撤消。  

15 、 INTERPRETER— 俺有一个《泡 MM 真 经 》,上面有各 种 泡 MM 的攻略,比如 说 去吃西餐的 步骤 、去看 电 影的方法等等,跟 MM 约 会 时 ,只要做一个 Interpreter ,照着上面的脚本 执 行就可以了。  

解 释 器模式: 给 定一个 语 言后,解 释 器模式可以定 义 出其文法的一 种 表示,并同 时 提供一个解 释 器。客 户 端可以使用 这 个解 释 器来解 释这 个 语 言中 的句子。解 释 器模式将描述怎 样 在有了一个 简单 的文法后,使用模式 设计 解 释这 些 语 句。在解 释 器模式里面提到的 语 言是指任何解 释 器 对 象能 够 解 释 的任何 组 合。在解 释 器模式中需要定 义 一个代表文法的命令 类 的等 级结 构,也就是一系列的 组 合 规则 。 每 一个命令 对 象都有一个解 释 方法,代表 对 命令 对 象的解 释 。命令 对 象的等 级结 构中的 对 象的任何排列 组 合都是一个 语 言。  

16 、 ITERATOR— 我 爱 上了 Mary ,不 顾 一切的向她求婚。  

Mary : “ 想要我跟你 结 婚,得答 应 我的条件 ” 
我: “ 什 么 条件我都答 应 ,你 说 吧 ” 

Mary : “ 我看上了那个一克拉的 钻 石 ” 
我: “ 我 买 ,我 买 , 还 有 吗 ? ” 

Mary : “ 我看上了湖 边 的那 栋别 墅 ” 
我: “ 我 买 ,我 买 , 还 有 吗 ? ” 

Mary : “ 你的小弟弟必 须 要有 50cm 长 ” 
我 脑 袋 嗡 的一声,坐在椅子上,一咬牙: “ 我剪,我剪, 还 有 吗 ? ” 
…… 

迭代子模式:迭代子模式可以 顺 序 访问 一个聚集中的元素而不必暴露聚集的内部表象。多个 对 象聚在一起形成的 总 体称之 为 聚集,聚集 对 象是能 够 包容一 组对 象的容器 对 象。迭代子模式将迭代 逻辑 封装到一个独立的子 对 象中,从而与聚集本身隔 开 。迭代子模式 简 化了聚集的界面 。 每 一个聚集 对 象都可以有一个或一个以上的迭代子 对 象, 每 一个迭代子的迭代状 态 可以是彼此独立的。迭代算法可以独立于聚集角色 变 化。  

17 、 MEDIATOR— 四个 MM 打麻将,相互之 间谁应该给谁 多少 钱 算不清楚了,幸 亏 当 时 我在旁 边 ,按照各自的 筹码 数算 钱 , 赚 了 钱 的从我 这 里拿, 赔 了 钱 的也付 给 我,一切就 OK 啦,俺得到了四个 MM 的 电话 。  

调 停者模式: 调 停者模式包装了一系列 对 象相互作用的方式,使得 这 些 对 象不必相互明 显 作用。从而使他 们 可以松散偶合。当某些 对 象之 间 的作用 发 生改 变时 ,不会立即影响其他的一些 对 象之 间 的作用。保 证这 些作用可以彼此独立的 变 化。 调 停者模式将多 对 多的相互作用 转 化 为 一 对 多的相互作用。 调 停者模式将 对 象的行 为 和 协 作抽象化,把 对 象在小尺度的行 为 上与其他 对 象的相互作用分 开处 理。  

18 、 MEMENTO— 同 时 跟几个 MM 聊天 时 ,一定要 记 清楚 刚 才跟 MM 说 了些什 么话 ,不然 MM 发现 了会不高 兴 的哦,幸 亏 我有个 备 忘 录 , 刚 才与哪个 MM 说 了什 么话 我都拷 贝 一份放到 备 忘 录 里面保存, 这样 可以随 时 察看以前的 记录 啦。  

备 忘 录 模式: 备 忘 录对 象是一个用来存 储 另外一个 对 象内部状 态 的快照的 对 象。 备 忘 录 模式的用意是在不破坏封装的条件下,将一 个 对 象的状 态 捉住,并外部化,存 储 起来,从而可以在将来合适的 时 候把 这 个 对 象 还 原到存 储 起来的状 态 。  

19 、 OBSERVER— 想知道咱 们 公司最新 MM 情 报吗 ?加入公司的 MM 情 报邮 件 组 就行了, tom 负责 搜集情 报 ,他 发现 的新情 报 不用一个一个通知我 们 ,直接 发 布 给邮 件 组 ,我 们 作 为订阅 者( 观 察者)就可以及 时 收到情 报 啦  

观 察者模式: 观 察者模式定 义 了一 种 一 队 多的依 赖关 系, 让 多个 观 察者 对 象同 时监 听某一个主 题对 象。 这 个主 题对 象在状 态 上 发 生 变 化 时 ,会通知所有 观 察者 对 象,使他 们 能 够 自 动 更新自己。  

20 、 STATE— 跟 MM 交往 时 ,一定要注意她的状 态 哦,在不同的状 态时 她的行 为 会有不同,比如你 约 她今天 晚 上去看 电 影, 对 你没 兴 趣的 MM 就会 说 “ 有事情啦 ” , 对 你不 讨厌 但 还 没喜 欢 上的 MM 就会 说 “ 好啊,不 过 可以 带 上我同事 么 ? ” ,已 经 喜 欢 上你的 MM 就会 说 “ 几点 钟 ?看完 电 影再去泡吧怎 么样 ? ” ,当然你看 电 影 过 程中表 现 良好的 话 ,也可以把 MM 的状 态 从不 讨厌 不喜 欢变 成喜 欢 哦。  

状 态 模式:状 态 模式允 许 一个 对 象在其内部状 态 改 变 的 时 候改 变 行 为 。 这 个 对 象看上去象是改 变 了它的 类 一 样 。状 态 模式把所研究的 对 象的行 为 包装在不同的状 态对 象里, 每 一个状 态对 象都属于 一个抽象状 态类 的一个子 类 。状 态 模式的意 图 是 让 一个 对 象在其内部状 态 改 变 的 时 候,其行 为 也随之改 变 。状 态 模式需要 对每 一个系 统 可能取得的状 态创 立一个状 态类 的子 类 。当系 统 的状 态变 化 时 ,系 统 便改 变 所 选 的子 类 。  

21 、 STRATEGY— 跟不同 类 型的 MM 约 会,要用不同的策略,有的 请电 影比 较 好,有的 则 去吃小吃效果不 错 ,有的去海 边 浪漫最合适, 单 目的都是 为 了得到 MM 的芳心,我的追 MM 锦 囊中有好多 Strategy 哦。  

策略模式:策略模式 针对 一 组 算法,将 每 一个算法封装到具有共同接口的独立的 类 中,从而使得它 们 可以相互替 换 。 策略模式使得算法可以在不影响到客 户 端的情况下 发 生 变 化。策略模式把行 为 和 环 境分 开 。 环 境 类负责维 持和 查询 行 为类 ,各 种 算法在具体的策略 类 中提供。由于算法和 环 境独立 开 来,算法的增减,修改都不会影响到 环 境和客 户 端。  

22 、 TEMPLATE METHOD—— 看 过 《如何 说 服女生上床》 这 部 经 典文章 吗 ?女生从 认识 到上床的不 变 的 步骤 分 为 巧遇、打破僵局、展 开 追求、接吻、前 戏 、 动 手、 爱抚 、 进 去八大 步骤 (Template method) ,但 每 个 步骤针对 不同的情况,都有不一 样 的做法, 这 就要看你随机 应变 啦 ( 具体 实现 ) ;  

模板方法模式:模板方法模式准 备 一个抽象 类 ,将部分 逻辑 以具体方法以及具体构造子的形式 实现 ,然后声明一些抽象方法来迫使子 类实现 剩余的 逻辑 。不同的子 类 可以以不同的方式 实现这 些抽象方法,从而 对 剩余的 逻辑 有不同的 实现 。先制定一个 顶级逻辑 框架,而将 逻辑 的 细节 留 给 具体的子 类 去 实现 。  

23 、 VISITOR— 情人 节 到了,要 给每 个 MM 送一束 鲜 花和一 张 卡片,可是 每 个 MM 送的花都要 针对 她个人的特点, 每张 卡片也要根据个人的特点来挑,我一个人哪搞得清楚, 还 是找花店老板和礼品店老板做一下 Visitor , 让 花店老板根据 MM 的特点 选 一束花 , 让 礼品店老板也根据 每 个人特点 选 一 张 卡, 这样 就 轻 松多了;  

访问 者模式: 访问 者模式的目的是封装一些施加于某 种 数据 结 构元素之上的操作。一旦 这 些操作需要修改的 话 ,接受 这 个操作的数据 结 构可以保持不 变 。 访问 者模式适用于数据 结 构相 对 未定的系 统 ,它把数据 结 构和作用于 结 构上的操作之 间 的耦合解脱 开 ,使得操作集合可以相 对 自由的演化。 访问 者模式使得增加新的操作 变 的很容易,就是增加一个新的 访问 者 类 。 访问 者模式将有 关 的行 为 集中到一个 访问 者 对 象中,而不是分散到一个个的 节 点 类 中。当使用 访问 者模式 时 ,要将尽可能多的 对 象 浏览逻辑 放在 访问 者 类 中,而不是放到它的子 类 中。 访问 者模式可以跨 过 几个 类 的等 级结 构 访问 属于不同的等 级结 构的成 员类 。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值