设计模式的定义

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

设计模式的分类

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

创建型模式

工厂方法

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

抽象工厂

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

生成器

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

原型

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

单例

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

结构型模式

适配器

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

桥接

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

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

组合

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

装饰

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

外观

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

使用场景:用到比较大的库但是使用的功能却非常简单时。比如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. CNN阴影去除--DeshadowNet: A Multi-context Embedding Deep Network for Shadow Removal
  2. [MySQL Reference Manual] 5 MySQL 服务管理
  3. GitHub一日千星:开头一张图,自动变成《我的世界》、乐高、十字绣风格,有Python就能跑...
  4. yolt 卫星图像进行快速目标识别的新方法
  5. C/C++ 整型提升(Integral Promotion)
  6. Centos与Ubuntu
  7. js中json的创建和解析
  8. rvm RuvyGem Cocoapods brew
  9. 吕玉琴考研指导电子版_【干货大放送】中国历代文学作品选阅读指导PDF
  10. 转://Linux Multipath多路径配置与使用案例
  11. qt sizePolicy属性
  12. 如何优雅的使用 phpStorm
  13. 树视图主要属性 c# 0207
  14. 百度视觉技术部人脸检测方向招聘实习生~北京
  15. CTO 写低级 Bug,致公司 70 GB 数据遭泄露!
  16. 百面机器学习—9.前馈神经网络面试问题总结
  17. 垂直滤波和水平滤波的区别_无锡有源滤波器的功能是_灿勤科技
  18. 计算机应用技术个人研修总结,学习应用信息技术的研修体会总结
  19. python写spark的效率问题_“大数据架构”Spark 3.0发布,重大变化,性能提升18倍...
  20. ​合并PDF文件什么方法很简单?看完你就明白了

热门文章

  1. AutoCAD视口及布局的说明
  2. JAVA毕设项目夕阳红养老院系统(java+VUE+Mybatis+Maven+Mysql)
  3. 悄然发力,大数据为京东插上二次加速的翅膀
  4. 关于Java面向对象的理解
  5. Task03:复杂查询方法-视图、子查询、函数等
  6. MySQL:复杂一点的查询----Datawhale第三次打卡笔记
  7. 5.绘制一个风轮效果,每个风轮的内角45边长150
  8. 比赛打分智能展示系统_评委计分系统-双屏标准版】隆重推出。
  9. 关于if if和if elseif的区别
  10. 6.Docker_Swarm集群