文档章节

23个设计模式的理解

gavin_jin
 gavin_jin
发布于 2012/11/11 12:29
字数 1190
阅读 381
收藏 37

23个设计模式是23个设计过程中经常重复出现的23种问题,以及如何依据OOP设计原则更好地解决这些问题。作为OOP新手,一种很好的理解方式就是把23个设计模式与23个具体问题对应,本文尝试为每种模式找到一个最贴切、最自然的例子。
一、创建型模式
1、抽象工厂Abstract Factory
全球连锁的披萨店,在不同城市添加不同口味的调味料,厨师不用管调味料的配方,只管向当地调料厂购买,加入披萨。
2、生成器Builder
金融公司根据客户情况定制投资策略,录入个人信息,根据客户要求价位的不同,推荐不同档次的产品。
3、工厂方法Factory Method
全国连锁奶茶店,客户点珍珠奶茶,香港分店给港式珍珠奶茶,台湾分店给台式珍珠奶茶。
4、原型Prototype
开会前把某数据表格复印很多份给与会人员,每个人都可以在自己的表格上修改。
5、单例Singleton
把Windows操作系统注册表当成一个对象,每次修改都有可能造成全局影响,所有进程都必须同步地访问注册表对象。

二、结构型模式
6、适配器Adapter
某个打印机的驱动程序原来运行在Linux中,现在需要在Windows环境下使用打印机,绝不需要完全重写驱动程序。
7、桥接Bridge
长虹和创维电视为了统一遥控器,都遵循遥控器厂家制定的遥控平台模块,这样遥控器厂家和电视厂家都可以各自扩展业务。
8、组合Composite
互联网由很多网络节点互联而成,这些节点可以是一台电脑,也可以是多台电脑组成的网络。
9、装饰Decorator
土豆肉丝和土豆肉丝加辣是同一道菜,土豆肉丝加辣聚合土豆肉丝,只是在出锅前加些辣椒。
10、外观Facade
输入网址就给我打开网页,不用去管DNS解析、路由、传输、解释这些细节,留给用户的接口很简单。
11、享元Flyweight
花园种了很多植物,每天都要给每个植物单独浇水,雇佣一个钟点工,每天只需要告诉他给所有植物浇水。
12、代理Proxy
远程桌面控制网络上另一个计算机,就像在实际坐在那台电脑前一样,实际上操作的是一个代理,它在内部完成网络通信。

三、行为模式
13、职责链Chain of responsibility
打电话给客服咨询一个技术难题,通常他是回答不了的,他们自己在公司内部找到一个能回答我问题的人与我交谈。
14、命令Command
所有数据库处理请求都由事务管理模块统一接收和分发,同时会记录这些操作,可以在以后取消操作或者进行灾难恢复。
15、解释器Interpreter
正则表达式匹配工具,先解释正则表达式表示的文法,在查询匹配。
16、迭代器Iterator
很自然的想到C++语言中支持各种容器的迭代器,可以遍历范围集合中每个元素,而不管集合的容器是什么。
17、中介者Mediator
买房是件很麻烦的事,要和很多对象反复沟通,包括业主、物业公司、国土局、档案局....,有了房屋中介,所有人只和他打交道。
18、备忘录Memento
打游戏别忘了存档,管理存档的对象就是备忘录。
19、观察者Observer
想了解名人的最新动态吗,关注他的微博吧,他会定期把信息推送给所有的粉丝。
20、状态State
有限状态机,能够描述很多现实生活中依赖流程的事物,把每个状态作为一个对象封装管理,不同状态下的行为各有不同。
21、策略Strategy
同一首歌曲可以有美声、民族、流行等多种唱法,录下各种唱法,想听其中一种时拿出一张盘点击播放即可。
22、模板方法Template Method
网上找来的菜谱,照着做就能做好菜了,还可以根据个人喜好调整中间某个环节。
23、访问者Visitor
想喝加了芥末的咖啡,但咖啡店没有,有个临时工服务员会做,于是订单就临时交给了这个服务员,并不需要改动原菜单。

本文转载自:http://blog.csdn.net/thinkingoo/article/details/7357014

共有 人打赏支持
gavin_jin
粉丝 26
博文 109
码字总数 115950
作品 0
海淀
技术主管
私信 提问
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
学了那么多年设计模式依然不会用!那可真蠢!

什么是设计模式? 设计模式(Design Pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决...

GitChat技术杂谈
10/26
0
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69

没有更多内容

加载失败,请刷新页面

加载更多

十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
26分钟前
2
0
Docker搭建代码质量检测平台-SonarQube(中文版)

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言...

Jacktanger
33分钟前
2
0
Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1、设置系统代理(Windows、Linux、MacOS) 2、设置代理插件(Chrome、Chromium、Firefox、Opera、QQ等浏览器) 3、...

sunboy2050
昨天
4
0
自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
昨天
3
0
徒手写一个es6代码库

mkdir democd demonpm initnpm install -g babelnpm install -g babel-clinpm install --save-dev babel-preset-es2015-node5 在项目目录创建两个文件夹 functional-playground ......

lilugirl
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部