设计模式之我爱我家(上)

类别:软件工程 点击:0 评论:0 推荐:

模式无处不在,这里讲述的是happy一家的故事:Happyfather,HappyMother还有HappySOn .本文纯属虚构,如有雷同 那实在是太巧和了。

行为模式:

CHAIN OF RESPONSIBILITY---职责链

定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系

使用频率:  

使用情景:

   HappySon:“老妈 这个题不会做了帮帮我”

   HappyMother:“要先这样然后在这样就行了”

   HappySon:“老妈 这个又不会了”

   HappyMother:“这个我也不会,问你老爸去吧”

   HappyFather:“这么简单呀,你们俩去看电视吧,我做完了叫你”

情景解释:HappyFathe和 HappyMother都有辅导HappySon功课的职责,谁会谁就帮忙处理

应用要点:请求没有明确接收者,通过后继者链进行传递请求

COMMAND----命令

定义:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作

使用频率:

使用情景:

   HappyFather :“KFC 吗?我要一大瓶可乐,我老婆要一中瓶可乐,我儿子要一小瓶还要一个外卖桶”

半个小时后

   HappyFather:“我这个大瓶可以不要吗”

   KFC送货员:“对不起先生,你预定的就要付钱呀”

   HappyFather:“可是Command 模式支持可撤销操作呀”

   KFC送货员:“对不起先生,我只是个送外卖的”

情景解释:定餐就是Command 模式,每个人都有不同的请求

应用要点:Command 声明执行操作的接口

INTERPRETER---解释器

定义:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子

使用频率:

使用情景:

19××年某天,HappySon 九个月大

    Happyson:“哇….哇”

    HappyMother :“孩他爸快拿尿布来”

    HappySon:“哇哇….哇”

    HappyMother:“老公,快冲奶粉,儿子饿了”

    HappySon:“嘻…..嘿嘿”

    HappyMother:“亲爱的,儿子饭后要看你表演!”

情景解释:happyson的语言 只能由 HappyMother 解释给HappyFather 听

应用要点:将发生频率高的实例表述成一个简单语言的中的句子

ITERATOR---迭代器

定义:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示

使用频率:  

使用情景:

    HappyFather :“快播,琼窑的连续剧都是无病呻吟”

    HappyFather :“快播,中国足球比我的脚都臭”

    HappyFather:“跳过中央九台 ,全是鸟语听不懂”

    HappyFather:“就看这台吧 ,养眼”

    HappyMother 上来爆K  HappyFather

    HappyFather:“别打脸,明天还要上街买菜呢!”

原来HappyFather 要看的是模特大赛

情景解释:所有的电视台就是一个可以顺序访问的集合

应用要点:将对列表的访问和遍历从列表对象中分离出来并放入迭代器对象中

MEDIATOR---中介者

定义:用一个中介对象封装一些列的对象交互

使用频率:

使用情景:

工作调动关系,Happy一家临时搬到了××市,因为××市的人特别不好相处,所以Happyfather 通过房屋中介所租房子:房租资金,配套设施只需和中介所交涉,然后中介所再和房东协商,这样就避免了和房东的直接联系

情景解释:中介所起到了中介的作用

应用要点:将对象之间的交互操作封装到MEDIATOR(中介者)中介者对象中

MEMENTO—备忘录

定义:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态

使用频率

使用情景:

   HappyMother:“有出息了你!不是让你去刷马桶嘛,居然敢看电视!”

   HappyFather:“今天是咱们结婚纪念日,我在看那天的结婚录像”

   HappyMother:“算你有良心,还记得这个日子”

情景解释:结婚录像就是备忘录

应用要点:记录对象在某个瞬间的内部状态以支持取消操作机制

OBSERVER---观察者

定义:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新

使用频率:  

使用情景:

美国进攻伊拉克,HappyFather 每天读报了解最新消息,HappyMother 每天看电视获得最新消息,HappySon每天上网浏览最新消息,战况变化,一家人通过不同的对象获取最新消息

情景解释:报纸、电视、网络的新闻都是依赖于伊拉克战况的

其他应用:数据变化时用于数据显示的表格、图相应跟随改变

STATE---状态

定义:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类

使用频率:
使用情景:

   HappyFather 工作劳累病倒了

   HappyMother:“老公,快起来吃药”

   HappyMother:“老公,起来吃点水果”

   HappyMother::“老公,不要作家务,快去休息”

嘿嘿,这么舒服,HappyFather 病好了还想在床上赖两天

   HappyMoterh :“你怎么还不起来收拾房间?”

   HappyFather :“我…我 病还没有好”

   HappyMother:“装!往死里装!”

   HappyFather :“得不得病态度差这么多呀!”

情景解释:得病和病好了是两种不同的状态

应用要点:将所有与一个特定状态相关的行为都放入一个对象中

STRATEGY---策略模式

定义:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户

使用频率:

使用情景:

小王两年前借HappyFather的钱至今未还,正好这天小王来Happy 家做客(正是要帐的好机会)。

首先旁敲侧击法

HappyFather:“前两天我见到咱们的老同学小李了,他还了我1000元钱,说是两年前借的,他要是不还呀,我都忘了”

小王:“是呀,小李的记性就是好,比我强多了”

居然没奏效,下一招诱蛇出洞

HappyFather:“听说你最近生意不错呀,怎么样成本都收回来了嘛?债务都还上了吗?”

小王:“还算红火,债务基本上还清了”

看来只能单刀直入了

HappyFather:“那你借我的2000元也该还了吧!”

情景解释:针对向小王要帐这个事情,HappyFather 采用了三个办法,办法之间可以相互替换,这些方法对谁都有作用的。

应用要点:用类封装不同的算法而不是将算法直接硬编码到代码中

TEMPLATE METHOD---模板方法

模式定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod 使

得子类可以不改变一个算法得结构即可以重定义该算法得某些特定步骤。

使用频率:

使用情景:

HappyMother 递给HappyFather  一本毛衣编织教学书:“选个你喜欢得样式,天冷了我给你织件毛衣”

HappyFather:“你?织毛衣?我没有听错吧!”

HappyMother:“这算什么,有了这本书,毛裤我也会织!”

情景解释:毛衣编织教学的书就相当一个模板,HappyMother 可以根据上面的样式织自己喜欢的毛衣

其他应用:模板可以作为核心业务的抽象,客户层针对不同的业务具体实现,达到复用核心业务的目的

VISITOR----访问者模式

模式定义:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类

的前提下定义作用于这个元素的新操作

使用频率:

使用情景:

    您在为自己的冰箱闲职无用而发愁吗?Happy家原来也是,不过现在不用发愁了

HappyFather 买了一整头猪回来,而且还做了一份详细的计划:猪头煮熟了做凉菜,

猪腿呢就做水晶肘子,猪的前榜可以肉馅。。。。。。。,不过如果你的冰箱不够大可不要

学HappyFather的做法

情景解释:针对猪的不同位置可以采用不同的做法,就像遍历对象所有的节点,针对不同的

节点采用不同的操作。

应用要点:Visitor包含两个类层次:一个对应接收操作的对象,另一个对应定义对元素的操作的访问者

设计模式我爱家(下)地址:http://www.csdn.net/Develop/read_article.asp?id=27593

本文地址:http://com.8s8s.com/it/it36987.htm