您的位置:首页 > 其它

23种设计模式的有趣见解

2010-03-29 22:01 120 查看

建型模式

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
的特点

一束花


礼品店老板也根据

个人特点



卡,
这样


松多了;

访问
者模式:
访问
者模式的目的是封装一些施加于某

数据

构元素之上的操作。一旦

些操作需要修改的

,接受

个操作的数据

构可以保持不


访问
者模式适用于数据

构相

未定的系

,它把数据

构和作用于

构上的操作之

的耦合解脱

,使得操作集合可以相

自由的演化。
访问
者模式使得增加新的操作

的很容易,就是增加一个新的
访问



访问
者模式将有

的行

集中到一个
访问


象中,而不是分散到一个个的



中。当使用
访问
者模式

,要将尽可能多的


浏览逻辑
放在
访问


中,而不是放到它的子

中。
访问
者模式可以跨

几个

的等
级结

访问
属于不同的等
级结
构的成
员类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: