《深入浅出设计模式》小结
由于最近参加笔试的原因,我感觉到了学习“设计模式”的重要性。为此,我从网上下载了一份资料,叫做《深入浅出设计模式》。在这份资料中,作者一共提到了22种设计模式,大致按照“引言”->“定义/分类”->“程序实现”->“实例”->“小结”的顺序将各“设计模式”为我们简要地一一道来。虽然之前没有学过这门课程,我还是觉得受益颇多。
为了帮助自己记忆,同时让大家了解这22种“设计模式”到底有哪些,我将各模式的定义与分类等总结如下。
1. 工厂模式(静态工厂模式、工厂方法模式或抽象工厂模式)
1) 定义:工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的;
2) 分类:分为三类,即简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)。
2. 单例模式(单态模式或单件模式)
1) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点;其目的就是要控制特定的类只产生一个对象,当然也允许在一定情况下灵活地改变对象的个数;
2) 分类:分为有状态的和无状态的。
3. 建造模式
1) 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;也可以理解为:将构造复杂对象的过程和组成对象的部件解耦。
4. 原型模式
1) 定义:它属于对象创建模式,它用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
5. 适配器模式(Adapter)
1) 定义:将一个类的接口转换成客户希望的另外一个接口,该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;它可以实现在面向接口编程中更好的复用;
2) 分类:分为类适配器模式和对象适配器模式。
6. 桥梁模式(Bridge)
1) 定义:它将抽象部分与其实现部分分离,使它们都可以独立地变化。
7. 组合模式(Composite)
1) 定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
8. 装饰模式
1) 定义:装饰模式(Decorator)也叫包装器模式(Wrapper),它动态地给一个对象添加一些额外的职责。
9. 门面模式
1) 定义:门面模式(façade)又称外观模式,它为子系统中的一组接口提供一个一致的界面;该模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
10. 享元模式(Flyweight Pattern)
1) 定义:采用一个共享类来避免大量拥有相同内容的“小类”的开销,它区分了内蕴状态和外蕴状态,内蕴状态就是共性,外蕴状态就是个性;
2) 分类:单纯享元模式和复合享元模式。
11. 代理模式(Proxy Pattern或Surrogate Pattern)
1) 定义:它为其它对象提供一种代理以控制对这个对象的访问;
2) 分类:分为8种,常见的有:远程(Remote)代理、虚拟(Virtual)代理、保护(Protect或Access)代理和智能引用(Smart Reference)代理。
12. 责任链模式
1) 定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系;将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
13. 命令模式
1) 定义:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
14. 解释器模式
1) 定义:定义语言的文法,并且建立一个解释器来解释该语言中的句子;如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子;这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
15. 迭代器模式
1) 定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式,它提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
16. 调停者模式(Mediator Pattern)
1) 定义:用一个调停对象来封装一系列的对象交互;将原来两个直接引用或者依赖的对象拆开,在中间加入一个“调停”对象,使得两头的对象分别和“调停”对象引用或者依赖。
17. 备忘录模式
1) 定义:备忘录(Memento)模式又称标记(Token)模式,它不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态;这样以后就可将该对象恢复到原先保存的状态。
18. 观察者模式
1) 定义:观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
19. 策略模式(Strategy)
1) 定义:它属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。
20. 状态模式(State)
1) 定义:允许一个对象在其内部状态改变时改变它的行为。
21. 模板模式(Template Method)
1) 定义:它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
22. 访问者模式(Visitor)
1) 定义:使用了这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升;表示一个作用于某对象结构中的各元素的操作,它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
总的说来,各模式均有其适用条件及其优缺点,我们需要在具体的应用场合来灵活地选用合适的设计模式。
《深入浅出设计模式》小结相关推荐
- 《认知设计》-提升学习体验的艺术
最近看完了<认知设计-提升学习体验的艺术>这本书,不得不说里面有很多关于设计学习体验的知识.同时也了解到自己也有很多在学习上面的误区.值得推荐给大家看一看.先上思维导图 这本书的封面: 首 ...
- 《认知设计:提升学习体验的艺术》——小结
小结 成功的学习体验并不仅仅是使学习者学习到更多的知识,更应让他们能够运用这些知识做更多的事情. 有些时候,学习者的主要差距在于知识层面,但更多时候知识和信息是次要问题,主要问题是应培养学习者的技能. ...
- 《认知设计:提升学习体验的艺术》——学习者喜欢什么
学习者喜欢什么 除了知道学习者想要什么外,你也需要了解他们喜欢什么.我的游戏设计师朋友同样提倡(主张)发现你的学习者的偏好(不同于爱好): --你能发现,如果我们专注于开发用户需要和喜爱的软件,本质上 ...
- 《认知设计:提升学习体验的艺术》——差距在哪里
差距在哪里 差距是你的学习者当前的起点和他们希望达到的终点之间的距离.其中一部分可能是知识上的差距,但从我们之前的讨论可以看出,其实还有其他类型的差距. 如果你能够认识这些差距,那么你就能够设计出更好 ...
- Web用户体验设计提升实践
本文首发于微信公众号"Shopee技术团队". 前言 本文是基于 Shopee 供应链团队内部 WMS(Warehouse Management System,仓库管理系统) 项目 ...
- Web 用户体验设计提升指南
转载自:https://juejin.cn/post/6932647134944886797 前端优秀实践不完全指南 一个 Web 页面,一个 APP,想让别人用的爽,也就是所谓的良好的用户体验,我觉 ...
- 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计
除去少部分以"折磨"玩家为己任的"受苦"游戏,电子游戏其本质上还是为了给予使用者美好的体验. 除去游戏的画面.手感.音乐等等一些会直接影响玩家体验的重要要素, ...
- 协众信息UI设计怎么提升用户体验呢
随着软件行业的发展兴起的一个新的设计行业.UI设计除了对美观有要求外,还对用户体验有要求,这也是UI设计不同于其他设计的地方.那么,UI设计怎么提升用户体验呢? 1.层次结构 要确 ...
- 产品设计如何提升客户体验?
在现如今多元化的市场发展,产品设计和制造不局限于制造企业,因而相近产品的选用愈来愈多.各行各业都在思索如何提高产品与顾客中间的黏性.由于产品设计公司归属于设计领域,因此在做产品设计前一定要进行市场调查 ...
- 4个方法教你增强你的UI设计,提升用户体验!
在追求用户体验至上的时代,设计的简单直白显得尤为重要,而极简也成为现代很多年轻人所追崇的.为了迎合用户的的需求和喜好,UI设计师自然也需要向这一方向努力,那么怎么才能增强设计的极简化特征,提升用户体验 ...
最新文章
- GT Transceiver中的重要时钟及其关系(6)TXUSRCLK以及TXUSRCLK2的用途与关系
- DL之DenseNet:DenseNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- ( 1 )Linux 常用命令
- UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置
- JavaOne美国之行–走势篇
- 778. 水位上升的泳池中游泳
- 观点 | 量子卫星很近,但“无法破解”的网络可能还很远
- 软件测试工程师必备技能之Java基础
- 解决最新小马激活工具导致主页劫持问题
- uni-app中view和text组件和动画的使用
- Firefox about:config设置
- 高德地图各种摄像头图标_高德地图Overlay的应用以及照相功能的实现
- 事半功倍追求卓越:人生找位的“TONS法则”
- 如何利用springboot快速搭建一个消息推送系统
- 虚拟机安装包——————百度网盘
- nyoj239 月老的难题 (匈牙利算法,最大匹配,邻接表)
- Windows Terminal美化杂记-Windows Terminal使用与配置
- 为什么两台电脑互连怎么一边能ping通在一边却ping不通
- OpenStack之部署块存储服务cinder
- 使用Egret粒子编辑器实现烟雾效果