本文以生活场景中的实例来分析常见的设计模式,试图以一种通俗易懂的方式来解读设计模式。每个设计模式的分析从以下5个点进行阐述:
1、
定义:四人帮的《设计模式》书中对该设计模式的定义。
2、
实例:生活场景中的实例抽象。
3、
原始场景:实例中不带有设计模式思想的原始场景介绍。
4、
模式场景:实例中带有此设计模式思想的场景介绍。
5、
应用模式后的场景解析:将应用了设计模式思想的场景中的对象、事物与定义中的概念做映射对比,从而能更形象的理解此设计模式。
一、 观察者模式
1.
定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
2.
实例:上班时间玩游戏
3.
原始场景:上班时间,很多人在老板出门办事不在的时候玩游戏,同时每个玩游戏的人又得留意着老板回来,只要老板一回来赶紧关闭游戏开始工作。
4.
观察者模式场景:上班时间,很多人在老板出门办事不在的时候玩游戏,这些玩游戏的人叫前台秘书专门留意着老板回来,只要老板一回来这个前台秘书就通知玩游戏的人,然后玩游戏的人就赶紧关闭游戏开始工作。
5.
应用模式后的场景解析:
场景中的object |
定义中的概念 |
那些老板不在时玩游戏的人 |
多个观察者对象 |
前台秘书 |
主题对象 |
老板是否回来 |
状态 |
老板回来了 |
状态发生变化 |
前台秘书就通知玩游戏的人 |
通知所有观察者对象 |
玩游戏的人赶紧关闭游戏开始工作 |
他们能够自动更新自己 |
二、 适配器模式
1.
定义:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以在一起工作。
2.
实例:外籍球员打球
3.
原始场景:姚明去NBA打球,因为不懂英语不能和教练正常交流。
4.
适配器模式场景:姚明不懂英语,去NBA打球,为了能和教练交流,姚明请了个翻译,通过翻译姚明能和教练正常交流。
5.
应用模式后的场景解析:
场景中的object |
定义中的概念 |
外籍球员(姚明) |
一个类的接口 |
客户 |
教练 |
客户希望的另一个接口 |
翻译 |
姚明和教练不能正常交流 |
接口不兼容而不能一起工作 |
姚明不懂英语,不能和教练正常交流,通过翻译姚明能和教练正常交流 |
由于接口不兼容而不能一起工作的那些类可以在一起工作 |
三、 备忘录模式
1.
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
2.
实例:打游戏
3.
原始场景:玩通关游戏,玩到某一关失败了,又得重头再来。
4.
备忘录模式场景:玩通关游戏,玩的过程中及时的保存游戏,失败后就重新载入最近保存的游戏接着再玩。
5.
应用模式后的场景解析:
场景中的object |
定义中的概念 |
通关游戏 |
对象 |
游戏中的人物、场景、生命力、战斗力等 |
对象的内部状态 |
保存游戏 |
保存这个状态 |
重新载入最近保存的游戏 |
将该对象恢复到原先保存的状态 |
四、 外观模式
1.
定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
2.
实例:炒股
3.
原始场景:投资者自己选择各种股票去买。
4.
外观模式场景:投资者选择一个基金会,由基金会帮助投资者选择股票,投资者不用再去了解各种股票以确定选择,具体选择什么股票交由基金会负责。
5.
应用模式后的场景解析:
场景中的object |
定义中的概念 |
选择各种股票投资 |
子系统 |
各种股票 |
一组接口 |
基金会 |
一致的界面、高层接口 |
投资者不用再去了解各种股票以确定选择,具体选择什么股票交由基金会负责 |
使得这一子系统更加容易使用 |
(未完待续……)