设计模式的定义

软件设计中常见问题的典型解决方案。

设计模式的分类

  • 创建型模式:提供创建对象的机制,增加已有代码的灵活性和可复用性。
  • 结构型模式:介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。
  • 行为模式:负责对象间的高效沟通和职责委派。

创建型模式

工厂方法

在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。

抽象工厂

可创建一系列相关的对象,而无需指定其具体类。

生成器

可分步骤创建复杂对象。可实现使用相同的创建代码生成不同类型和形式的对象。

原型

可复制已有对象,而又无需使代码依赖它们所属的类。

单例

保证一个类只有一个实例,并提供一个访问该实例的全局节点。

结构型模式

适配器

能使接口不兼容的对象能够相互合作。

桥接

用于拆分或重组一个具有多重功能的庞杂类。

具体来说,通过抽取其中一个维度(一方面的功能)并使之成为独立的类层次,这样就可以在初始类中引用这个新层次的对象,从而使得一个类不必拥有所有的状态和行为。

组合

将对象组合成树状结构,并且能像使用独立对象一样使用它们。

装饰

将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。

外观

能为程序库、框架或其他复杂类提供一个简单的接口。

使用场景:用到比较大的库但是使用的功能却非常简单时。比如FFmpeg这个库很大,但如果程序用到该库的功能很少,比如只有视频格式转换功能,那么把视频转换的相关操作写到一个类中的函数里面,下次要修改直接修改此函数即可,这就是外观模式。(不要把设计模型想象得太复杂、太难。设计模式是程序设计、解决问题的思路

代理

能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。

享元

通过共享多个对象所共有的相同状态,使得在有限的内存容量中载入更多对象。享元模式建议不在对象中存储外在状态,而是将其传递给依赖于它的一个特殊方法。程序只在对象中保存内在状态,以方便在不同情景下重用。

此模式在以下情况下最有效:

  • 程序需要生成数量巨大的相似对象。
  • 这将耗尽目标设备的大量内存
  • 对象中包含可抽取且能在多个对象间共享的外部状态属性。

对象的属性可区分为外部属性和内部属性。外部属性可抽取出来单独存放(一般使用容器)。(比如围棋对象,它的颜色是内部属性,在棋盘上的位置是外部属性,那么就可以把棋盘上所有围棋的位置保存到一个容器中)

行为模式

责任链

将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。

命令

将请求转换为一个包含与请求相关的所有信息的独立对象。该转换可以能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。

迭代器

在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。

中介者

能减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。

备忘录

在不暴露对象实现细节的情况下保存和恢复对象之前的状态。

观察者

定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。

状态

在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。

策略

定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。

模板方法

在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。

访问者

将算法与其所作用的对象隔离开来。

设计模式:概念和类型相关推荐

  1. nginx虚拟主机概念和类型介绍

    nginx虚拟主机配置实战 1,虚拟主机概念和类型介绍 所谓虚拟主机,在web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服 ...

  2. Linux 终端概念和类型的理解

    目录 Linux 终端概念和类型的理解 查询正在使用的终端命令 可以使用 `tty` 查看当前所在的终端 查看当前连接计算机的终端设备 查看当前正在连接的终端设备和正在使用的程序 终端的概念 Linu ...

  3. 智慧城市的大脑——智慧模型的概念、类型和作用

    本文分析了我国智慧城市的发展现状,发现我国的智慧城市亟需智慧的"大脑"来分析利用数据.发现城市问题.提供解决方案.对此,提出智慧模型就相当于智慧城市的大脑,可以满足智慧城市分析的需 ...

  4. mysql 不同分区 同时insert_一文看懂mysql数据库分区表概念、类型、适用场景、优缺点及原理...

    概述 最近对项目上部分表按时间做了分区,所以顺便整理下mysql分区表的一些内容,仅供参考. 一.分区表概念 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分, ...

  5. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

    文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...

  6. 指标体系的概念和类型,总算有人讲明白了

    导读:与指标体系相关的概念有很多,包括指标.度量.KPI.维度等.界定清楚这些概念,对于构建和运用指标体系至关重要. 01 认识指标 与指标体系相关的概念有很多,包括指标.度量.KPI.维度等.界定清 ...

  7. 《大数据导论》之数据的概念、类型和组织形式

    目录 说在前面 一.数据的概念 二.数据类型 ​三.数据组织形式 说在前面 大数据时代悄然来临,带来了整个信息技术发展的巨大变革,并深刻影响着社会生产和人们生活的方方面面.全球范围内,世界各国政府也非 ...

  8. 【Linux】文件系统的概念和类型

    一. Linux文件系统的基本概念 文件系统(File System)是磁盘上有特定格式的一片区域,操作系统利用文件系统保存和管理文件. 不同的操作系统需要使用不同的文件系统,为了与其他操作系统兼容, ...

  9. 设计模式(经典类型)

    设计模式 设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列的套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性的解决方案. 学习设计模式的意义 设计模式 ...

最新文章

  1. Linux内核学习笔记十一——I/O层和I/O调度机制
  2. 前端还是后端?这些公号教你一锅端!
  3. 征战蓝桥 —— 2013年第四届 —— C/C++A组第9题——剪格子
  4. visual c++ build tools的安装与使用
  5. 【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)
  6. 金立e3t刷android4.4,金立E3T刷机包 Amigo OS 小清新风格 个性化定制功能 稳定流畅...
  7. php面试题之三——PHP网络编程(高级部分)
  8. pma mysql_mysql pma怎么看当前连接数
  9. 网易音乐链接html代码,爬取网易云音乐MP3链接脚本
  10. 关于项目一直updating indexes不停的解决方案
  11. kalibr源码解析之fov模型重投影误差计算
  12. 数据库设计之概念结构设计
  13. 一个dsp最小系统至少要有_DSP最小系统
  14. 摩托车一键启动无钥匙进入系统,摩托车PKE无钥匙进入一键启动系统
  15. python对淘宝运营有帮助吗_优秀的淘宝运营需要具备哪些能力
  16. 基于Python通过Chrome的Cookie登录百度账户
  17. 8.0.高等数学3-向量的乘法运算(数量积、向量积与混合积)
  18. 厌倦城市,我逃往中国最南小镇,成为一个渔民
  19. 韩国计算机专业,韩国计算机专业发展前瞻
  20. 从项目管理角度谈OA流程优化

热门文章

  1. [转]ISO 4217 货币及基金代码
  2. 设计模式七大原则——开闭原则
  3. 前端后端是如何交互的
  4. SQL SERVER 2019安装教程-最全安装步骤
  5. 华为OD机试 九宫格按键输入法
  6. 领军全国嵌入式,ARM11重装上阵
  7. Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五)
  8. 象数疗法对胃肠疾病的治疗
  9. 一种VS设置中文编码格式的方式
  10. MATLAB智能算法实现 (一)