文档章节

23个设计模式的理解

gavin_jin
 gavin_jin
发布于 2012/11/11 12:29
字数 1190
阅读 380
收藏 37
点赞 0
评论 0

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
博文 99
码字总数 115950
作品 0
海淀
技术主管
系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的,因为很多的好朋友也比较关注这方面的内容,所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给...

wbf961127 ⋅ 2017/11/12 ⋅ 0

设计模式之禅(第2版).epub

【下载地址】 本书是设计模式领域公认的3本经典著作之一,“极具趣味,容易理解,但讲解又极为严谨和透彻”是本书的写作风格和方法的最大特点。第1版2010年出版,畅销至今,广受好评,是该领...

winter730 ⋅ 05/16 ⋅ 0

C#设计模式(2)——简单工厂模式

一、引言   这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工...

技术小胖子 ⋅ 2017/11/08 ⋅ 0

JavaScript设计模式之观察者模式

前言 准备研究一下MVVM的一些东西,由于MVVM运用了观察者模式的思想,因此翻开了《JavaScript设计模式与开发实践》一书,将观察者模式学习了一遍,顺便有对一些常用的设计模式进行一些了解,...

Srtian ⋅ 05/22 ⋅ 0

[设计模式]简单工厂模式

简介 简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。 简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例。 简单工厂模式是一...

静默虚空 ⋅ 2015/06/03 ⋅ 0

代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho ⋅ 04/09 ⋅ 0

一天一篇设计模式之--工厂模式与抽象工厂模式(创建型模式)

工厂模式与抽象工厂模式主要解决接口选择问题。 一、工厂模式 当明确计划需要在不同条件下创建不同实例时,可以使用工厂模式。 实例:发送邮件或者短信 1、创建发送信息的接口 2、创建两个实...

Timor_张先生 ⋅ 04/10 ⋅ 0

你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人 ⋅ 06/02 ⋅ 0

JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云 ⋅ 05/18 ⋅ 0

js策略模式《JavaScript设计模式与开发实践》阅读笔记

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且是它们可以相互替换。 策略模式可以避免代码中的多重判断条件。 策略模式很好的体现了开放-封闭原则,将一个个算法(解决方...

RoyLuo ⋅ 05/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 24分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 31分钟前 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 34分钟前 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 36分钟前 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 37分钟前 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 40分钟前 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 48分钟前 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 58分钟前 ⋅ 0

vim介绍、vim颜色显示和移动光标、vim一般模式下移动光标、一般模式下复制粘贴剪切

VIM Vim 是 UNIX 文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff),语法高亮,全面的帮助系统,本地脚本(Vimscript),和便于选择的...

蛋黄Yolks ⋅ 今天 ⋅ 0

springboot+mockito测试controller层遇到的问题

使用MockitoJUnitRunner测试的一个例子,原来报错无法找到bean, 类似的异常如下:createBeanError..... 原因:是因为@Runwith使用了SpringRunner,应该修改为MockitoJUnitRunner 代码如下: ...

writeademo ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部