设计模式

设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。

这是《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented)中对设计模式的定义。看完以后你会不会和我有一样的感觉:这特么说是啥?

于是,我找到了英文原文:

The design patterns are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.

稍微翻译一下:设计模式是对互相通信对象和类的描述,这些对象和类被定制以解决特定场景下的一般设计问题。(一些技术书籍晦涩难度,甚至语义不通,大多数是翻译的锅。)

也可以理解为设计模式是某一类问题的通用解决方案,使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。

创建模式

用于创建对象,为设计类实例化新对象提供指南。

中文名称 英文名称 简要说明 速记关键字
工厂方法 Factory Method 定义了创建对象的接口,让子类决定实例化哪个类。 动态生产对象
抽象工厂 Abstract Factory 提供一个可以创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 生产系列对象
构建器 Builder 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 复制对象构造
原型 Prototype 通过拷贝原型对象创建新的对象。 克隆对象
单例 Singleton 确保一个类只有一个实例,并提供一个访问它的全局访问点。 单实例

结构型

用于处理类或对象的组合,对类如何设计以形成更大的结构提供指南。

中文名称 英文名称 简要说明 速记关键字
适配器 Adapter 将一个类的接口转换成希望的另外一个接口,使得原本不兼容的接口可以协同工作。 转化接口
桥接 Bridge 将类的抽象部分与它的实现分离,使它们都可以独立地变化。 继承树拆分
组合 Composite 将对象组合成树形结构以表示“部分-整体”的层次结构,同时对单个对象和组合对象的使用保持一致。 树形目录结构
装饰 Decorator 动态地给一个对象添加一些额外的职责。 动态附加职责
外观 Facade 为子系统中的一组接口提供一个统一的接口。 对外统一接口
享元 Flyweight 运用共享对象有效地支持大量细粒度的对象。 汉字编码
代理 Proxy 为控制对象的访问而提供的代理对象。 快捷方式

行为型

用于描述类或对象的交互以及职责的分配,对类之间交互以及分配责任的方式提供指南。

中文名称 英文名称 简要说明 速记关键字
职责链 Chain of Responsibility 将对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它。 传递职责
命令 Command 将请求封装为对象,就可以保存、传递命令,以及支持可撤销的操作。 日志记录,可撤销
解释器 Interpreter 可以解释自定义语法表示的解释器。 虚拟机的机制
迭代器 Iterator 提供一种方法可以顺序访问集合中的各个元素,又不需要暴露该集合的内部表示。 数据集
中介者 Mediator 用一个中介对象来封装一系列的对象交互。 不直接引用
备忘录 Memento 捕获一个对象的内部状态,并在该对象之外保存这个状态。 游戏存档
观察者 Observer 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 订阅、广播、联动
状态 State 允许对象在其内部状态改变时改变它的行为。 状态变成类
策略 Strategy 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。 多方案切换
模板方法 Template Method 定义一个操作中的算法的骨架,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 框架
访问者 Visitor 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 数据与操作分离

“你跟讲了这么多,说好的图呢?”
“不要着急,最好的总是在不经意的时候出现。”

一张图快速了解23种设计模式相关推荐

  1. 【一文快速理解23种设计模式】

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.这就不得不提到面向对象OO. 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP 面向对象的 ...

  2. 快速学习23种设计模式思想Design Patterns

    1.factory(工厂)追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德 基,只管向服务员说"来四个鸡翅"就行了 ...

  3. 快速记住23种设计模式

    设计模式主要分三个类型:创建型.结构型和行为型. 签合同,要分三步:1.创建新建合同 2.设计合同内容结构 3.要遵守合同的行为规范(对应创建,结构,行为三部分) 口诀: 1.单原二厂建 2.桥(帮) ...

  4. 快速记忆23种设计模式

    目录 一:创建型模式(5个): 1. 工厂模式(Factory Pattern) 2. 抽象工厂模式(Abstract Factory Pattern) 3. 单例模式(Singleton Patte ...

  5. 图解23种设计模式(TypeScript版)

    使用思维导图来阐述23种设计模式,并以TypeScript实现其代码,让我们前端切图崽写出的代码具有可扩展性.可复用性.减少代码冗余问题,提升自身内功. 一.设计原则 二.创建型模式 创建型模式包含单 ...

  6. 快速梳理23种常用的设计模式

    本文旨在快速梳理常用的设计模式,了解每个模式主要针对的是哪些情况以及其基础特征,每个模式前都有列举出一个或多个可以深入阅读的参考网页,以供读者详细了解其实现. 快速回忆 一.创建型 单例(Single ...

  7. 23种设计模式 UML 类图及对应示例代码 (二)

    23种设计模式 UML 类图及对应示例代码 (二) 11.DoFactory.GangOfFour.Flyweight.Structural Flyweight:运用共享技术有效的支持大量细粒度的对象 ...

  8. 23种设计模式类图总结

    下边是23种设计模式的类图大汇总,23种设计模式解析请移步 http://blog.csdn.net/qq_25827845/article/details/52932234 1.创建类模式 2.行为 ...

  9. 【黑马程序员】23种设计模式——UML图

    文章目录 前言 二.UML图 1)类图概述 2)类图的作用 3)类图表示法 1.类的表示方式 2.类与类之间关系的表示方式 2.1关联关系 ①单向关联 ②双向关联 ③自关联 2.2聚合关系 2.3组合 ...

  10. ULM图解 “23种设计模式”,及实例的类图

    UML图解设计模式 23种设计模式分为三大类 创建型模式(5种) 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式 结构型模式(7种) 适配器模式 装饰模式 代理模式 外观模式 桥接模式 组 ...

最新文章

  1. API pytorch tensorflow
  2. 【linux高级程序设计】(第十一章)System V进程间通信 3
  3. opencv图像灰化_opencv读入图像、灰度化、归一化、向量化
  4. win8: 清除iframe的缓存
  5. HotSpot虚拟机在Java堆中对对象的管理
  6. Python在信号与系统(1)——Hilbert兑换,Hilbert在国家统计局的包络检测应用,FIR_LPF滤波器设计,格鲁吉亚也迫使高FM(PM)调制...
  7. PMP读书笔记(第9章)
  8. 提升Python程序性能的7个习惯
  9. java junit
  10. unity android 在后台运行_Android 11“精简版”正式发布,低端机也可以流畅运行
  11. 研究生马上要毕业了,可是完全写不出论文,该退学吗?
  12. 人力资源管理数据分析
  13. POI导出Excel设置单元格格式
  14. 移动端/嵌入式-CV模型-2018:MobelNets-v2【Inverted Residuals(中间胖两头瘦)、Linear Bottlenecks(每个倒残差的最后一个卷积层使用线性激活函数)】
  15. 有限公司如何设立董事会
  16. 上了一堂健身课,27岁程序员尿尿像酱油!
  17. java aspx 验证码,asp 动态生成验证码
  18. elasticsearch-analysis-ik中文分词插件安装及配置Ik自定义词典+拼音分词
  19. 哈工大2018秋高级语言程序设计课程大作业
  20. chrome浏览器打不开网页 显示远程计算机或设备将不接受连接?

热门文章

  1. HDU4747 MEX(dp ,递推)
  2. 特殊符号大全,方便大家输入特殊字符用
  3. Jmeter 线程数、Ramp-Up、循环次数 详解
  4. mac 上安装selenium, phantomjs 和 chromedriver
  5. java kinect_使用java来做Kinect开发
  6. Flickr 网站架构分析(转)
  7. Unrecognized Windows Sockets error: 10106的解决办法
  8. 机器学习预测股票涨跌
  9. 鸿蒙不是Linux也不是安卓
  10. 解决:Elasticsearch failed to map source