文章目录

    • [学习地址 —— 不错的学习网站](http://c.biancheng.net/view/8374.html) : http://c.biancheng.net/view/8374.html
  • 创建型模式(5种)
    • 单例模式
    • 原型模型
    • 工厂模式
      • 简单工厂模式(不算23种里面)
      • 工厂方法模式
      • 抽象工厂模式
    • 建造者模式
  • 结构型模式(7种)
    • 代理模式
    • 适配器模式
    • 桥接模式
    • 装饰器模式
    • 外观模式
    • 享元模式
    • 组合模式
  • 行为型模式(11种)
    • 模板方法模式
    • 策略模式
    • 命令模式
    • 责任链模式
    • 状态模式
    • 观察者模式
    • 中介者模式
    • 迭代器模式
    • 访问者模式
    • 备忘录模式
    • 解释器模式
      • 一句话归纳设计模式

学习地址 —— 不错的学习网站 : http://c.biancheng.net/view/8374.html

创建型模式(5种)

单例模式

单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。

原型模型

原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。

工厂模式

在日常开发中,凡是需要生成复杂对象的地方,都可以尝试考虑使用工厂模式来代替。

工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式(不算23种里面)

我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。

简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式不在 GoF 23 种设计模式之列。

简单工厂模式每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度,违背了“开闭原则”。

“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。

工厂方法模式

注意:当需要生成的产品不多且不会增加,一个具体工厂类就可以完成任务时,可删除抽象工厂类。这时工厂方法模式将退化到简单工厂模式。

抽象工厂模式

抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。

其缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。


从图 2 可以看出抽象工厂模式的结构同工厂方法模式的结构相似,不同的是其产品的种类不止一个,所以创建产品的方法也不止一个

模式的应用场景
抽象工厂模式最早的应用是用于创建属于不同操作系统的视窗构件。如 Java 的 AWT 中的 Button 和 Text 等构件在 Windows 和 UNIX 中的本地实现是不同的。

抽象工厂模式通常适用于以下场景:

  1. 当需要创建的对象是一系列相互关联或相互依赖的产品族时,如电器工厂中的电视机、洗衣机、空调等。
  2. 系统中有多个产品族,但每次只使用其中的某一族产品。如有人只喜欢穿某一个品牌的衣服和鞋。
  3. 系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。

模式的扩展
抽象工厂模式的扩展有一定的“开闭原则”倾斜性:

  1. 当增加一个新的产品族时只需增加一个新的具体工厂,不需要修改原代码,满足开闭原则。
  2. 当产品族中需要增加一个新种类的产品时,则所有的工厂类都需要进行修改,不满足开闭原则。

另一方面,当系统中只存在一个等级结构的产品时,抽象工厂模式将退化到工厂方法模式。

建造者模式

建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。



模式的应用场景

文章目录

    • [学习地址 —— 不错的学习网站](http://c.biancheng.net/view/8374.html) : http://c.biancheng.net/view/8374.html
  • 创建型模式(5种)
    • 单例模式
    • 原型模型
    • 工厂模式
      • 简单工厂模式(不算23种里面)
      • 工厂方法模式
      • 抽象工厂模式
    • 建造者模式
  • 结构型模式(7种)
    • 代理模式
    • 适配器模式
    • 桥接模式
    • 装饰器模式
    • 外观模式
    • 享元模式
    • 组合模式
  • 行为型模式(11种)
    • 模板方法模式
    • 策略模式
    • 命令模式
    • 责任链模式
    • 状态模式
    • 观察者模式
    • 中介者模式
    • 迭代器模式
    • 访问者模式
    • 备忘录模式
    • 解释器模式
      • 一句话归纳设计模式

结构型模式(7种)

代理模式

代理模式的定义与特点
代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。




适配器模式

桥接模式

装饰器模式

装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

外观模式

外观模式的定义与特点

外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。


享元模式



组合模式

组合模式的定义与特点
组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。




文章目录

    • [学习地址 —— 不错的学习网站](http://c.biancheng.net/view/8374.html) : http://c.biancheng.net/view/8374.html
  • 创建型模式(5种)
    • 单例模式
    • 原型模型
    • 工厂模式
      • 简单工厂模式(不算23种里面)
      • 工厂方法模式
      • 抽象工厂模式
    • 建造者模式
  • 结构型模式(7种)
    • 代理模式
    • 适配器模式
    • 桥接模式
    • 装饰器模式
    • 外观模式
    • 享元模式
    • 组合模式
  • 行为型模式(11种)
    • 模板方法模式
    • 策略模式
    • 命令模式
    • 责任链模式
    • 状态模式
    • 观察者模式
    • 中介者模式
    • 迭代器模式
    • 访问者模式
    • 备忘录模式
    • 解释器模式
      • 一句话归纳设计模式

行为型模式(11种)

模板方法模式

模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。



直接去掉vip就可以访问…我超

策略模式



命令模式






责任链模式

责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。


状态模式

状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。



观察者模式

观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。


中介者模式

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

迭代器模式

迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

在日常开发中,我们几乎不会自己写迭代器。除非需要定制一个自己实现的数据结构对应的迭代器,否则,开源框架提供的 API 完全够用。


访问者模式







备忘录模式

备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。




解释器模式

解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。



一句话归纳设计模式


GoF 的 23 种设计模式相关推荐

  1. 实践GoF的23种设计模式:SOLID原则(上)

    本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者:元闰子. 前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题. ...

  2. c++ 23种设计模式_使用Go实现GoF的23种设计模式(三)

    前言 上一篇文章<使用Go实现GoF的23种设计模式(二)>中,我们介绍了结构型模式(Structural Pattern)中的组合模式.适配器模式和桥接模式.本文将会介绍完剩下的几种结构 ...

  3. java GoF 的 23 种设计模式的分类和功能

    摘抄:http://c.biancheng.net/view/1320.html 1.什么是GoF(摘抄自百度词条) <Design Patterns: Elements of Reusable ...

  4. 实践GoF的23种设计模式:建造者模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

  5. GoF的23种设计模式的分类和功能

    设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用范围来分. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构性模式和行为模式3种. 创建型模式:用于描述&qu ...

  6. 【Go实现】实践GoF的23种设计模式:命令模式

    上一篇:[Go实现]实践GoF的23种设计模式:代理模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Patter ...

  7. GoF的23种设计模式速记

    设计模式这东西平时也不怎么用,最近打算好好看一看这部分内容,但是GoF的23种设计模式在不熟悉的情况下,想要记住有点困难.所以想着自己画一个图,用于简单快速的记忆,同时也分享出来.让这些名词儿能在脑袋 ...

  8. GoF的23种设计模式之创建型模式的特点和分类

    创建型模式的主要关注点是"怎样创建对象?",它的主要特点是"将对象的创建与使用分离".这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关 ...

  9. GOF 面向对象 23 种设计模式详解

    GOF 设计模式 笔记总结自 GOF 的 <Design Patterns - Elements of Reusable Object-Oriented Software>,Erich G ...

  10. 为什么GOF的23种设计模式里面没有MVC?

    GoF (Gang of Four,四人组, <Design Patterns: Elements of Reusable Object-Oriented Software>/<设计 ...

最新文章

  1. qml demo分析(threading-线程任务)
  2. 服务器异常代码413问题
  3. java多态性详解——父类引用子类对象
  4. c mysql 的默认值_为mysql表字段设置默认值的方法及注意细节
  5. Spring AOP之公共的切入点配置
  6. js实战之-联动下拉菜单
  7. 正则表达式之常用量词
  8. 团队任务5:事后诸葛亮会议
  9. 笔试题算法系列(五)百度2017买帽子
  10. 使用ImageJ测图片中物体的平均灰度值
  11. 软件工程-第二章 软件过程
  12. 中国童装十大品牌是什么?
  13. 扫地机器人灰尘堵住_为什么扫地机器人每天都能扫出很多灰尘?介绍最实用的扫地机器人...
  14. Android 版本 相关参数修改(SpreadTrum)
  15. Ubuntu make 降级方法
  16. python爬虫-1.06-MaoyanSpider
  17. C#总是报未能加载文件或程序集
  18. 解决win11蓝牙开关不显示问题,没有更新蓝牙驱动
  19. SCI、SSCI、CSSCI、CSCD
  20. DC-DC升压恒压芯片-芯鼎盛TX4201IC

热门文章

  1. 2020.9.28 爱客影视3.6.5-pro完整版搭建完毕带解析接口无广告
  2. 微信浏览器跳转浏览器下载app解决方案
  3. UTAU - 完整无乱码汉化策略及资源配布
  4. 算法导论第三版 第4章习题答案
  5. android+字体稍微加粗,的Android设置的Roboto字体,加粗,斜体,普通,...(有点像自定义字体家族)...
  6. 一份JAVA工程师的求职简历来告诉你求职简历怎么写(上)
  7. Android系统 ——高通平台刷机流程(qfil)
  8. html视频透明背景怎么设置,微信透明背景图怎么设置 微信透明动态背景图设置方法...
  9. mac安装java环境
  10. 支付系统中人民银行支付系统(CNAPS)和中国银联下面的跨行支付系统是一回事儿吗?