23种GoF设计模式的分类
GoF设计模式一共有23个。一般可以按目的和作用范围来进行划分,具体划分方法如下:
第一,这些模式按目的(即完成什么样任务)来划分为创建型、结构型和行为型这三种模式:
- 创建型:用来创建对象。单例、原型、抽象工厂、建造者、工厂方法这五个都属于这一分类。这种类别起到了将对象的创建与其使用进行分离解耦。
- 结构型:用来处理类或对象之间如何组合以构成更大的结构体。桥接、装饰、适配器、代理、外观、享元、组合这七个属于这一类。
- 行为型:用来处理类或对象之间如何交互、协同工作和分配职责。模板方法、解释器、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录这11个属于这一类。
第二,按其是用到类上还是对象上来划分,可以分为类和对象两种模式。
- 类模式:主要用来处理类与其子类之间继承关系,这种关系是编译时确定的,运行时是静态和不变的。工厂方法、模板方法、(类)适配器、解释器这四个属于这一种。
- 对象模式:用于处理对象之间的组合或者聚合关系,运行时可以变化,是动态的。其他的19种都属于这一模式。具体见下图。
将这两种分类方法作为纵横方向,可以将具体的模式分类列一个表如下。
注意:一般初学者,因为记起来比较难记,本人原来是按照取每种模式的第一个字的谐音构成一句话来记忆,后面带有中划线的斜体的是类模式,虽说有些不正经、但是效果明显。如果深入理解了,就会很自然地根据名字划分,不需要这么记忆。
- 创建型:单元抽建法 ——> 单例、原型、抽象工厂、建造者、工厂方法 。
- 结构型:乔装(后)呆(在)外(面)像祖师(爷) ——> 桥接、装饰、代理、外观、享元、组合、适配器(对象或者类)
- 行为型:除过前面的都是行为型。或者如下:
知名观众装碟防被测(试带有)芥末 ——> 职责链、命令、观察者、中介者、状态、访问者、迭代器、备忘录、策略、解释器、模板方法 。
23种GoF设计模式的分类相关推荐
- 23种经典设计模式都有哪些,如何分类?Java设计模式相关面试
23种经典设计模式都有哪些,如何分类? 23种经典设计模式都有哪些,如何分类? java常用的设计模式?说明工厂模式 Java 中的23 种设计模式: Factory(工厂模式), Builder(建 ...
- C++之23种经典设计模式(一)
C++之23种经典设计模式(一) C++之23种经典设计模式(一) 单例模式(Singleton) 原型模式(Prototype) 工厂模式(Factory) C++之23种经典设计模式(一) 在偶然 ...
- 23种经典设计模式的原理、背后的思想、应用场景(下)
对程序员来说,除了算法,设计模式也是提升代码能力的关键技能,今天我就想跟你聊聊 23种经典的设计模式. 23种经典设计模式共分为3种类型,分别是创建型.结构型和行为型.今天,我们把这3种类型分成3个对 ...
- 23种常用设计模式的UML类图
23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整 ...
- 设计模式之委派模式(不属于23种经典设计模式之一)
介绍 标准定义:委派模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性,并且调用B中的方法.属性就是调用A中同名的方法和属性.B好像就是一个受A授权委托的中介.第三方的代 ...
- 一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一.设计模式是什么? 设计模式是为了解决在软件开发过程中遇到的某些问题而形成的思想.同一场景有多 ...
- javaEE Design Patter(1)初步了解23种常用设计模式
设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. ...
- [设计模式] GoF 23种经典设计模式
原文链接:https://www.yuque.com/cppdev/patterns/zainii 「GOF设计模式」Gang of Four,四人帮.设计模式的经典书籍<设计模式--可复用面向 ...
- 一文快速理解23种经典设计模式
> 对经典的23种设计模式介绍,来判断适合哪种设计模式进行设计 23种设计模式: 第1 部分 适应设计模式 Iterator 模式 迭代器,松耦合 Adapter 模式 适配器模式,使用同样 ...
最新文章
- day3 集合、文件操作、函数、局部变量
- Py之pandas:对dataframe型数据排序相关的问题总结之按照多个字段的多个条件进行排序(先打乱再排序)
- SQLServer之分离数据库
- java有链表吗_Java数据结构之链表(Linked List)
- 阿里P8架构师整理的架构图你看过吗
- MongoDB最简单的入门教程之五-通过Restful API访问MongoDB
- linux开发板 pc 通讯_从51单片机到Linux 开发板运行hello world(教程4)
- 10大Go语言开源项目推荐
- Python_多进程
- 云计算、计算虚拟化、网络基础简介
- 虚拟机如何安装Deepin系统
- LINUX检测网线热插拔事件
- 关于无线网卡驱动更新后无法使用(错误代码43)的问题
- 【JAVA小游戏】炸飞机
- 用dxdiag命令show计算机系统配置
- C++定义一个复数类Complex,使得下面的代码能够工作。(注:下列代码需放在主函数中。)
- [Python]调用百度API进行自然语言处理 标签、关键字 以及 词法分析
- [KMP]P3426
- 零基础开发--歌曲管理系统
- RxJava 过滤操作符(Filtering Observables Operators)
热门文章
- 奢侈品的品牌道路,硬核加持与价值观软包装
- c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)
- 中风患者的康复之光:间歇性θ波脉冲刺激可使中风后脑功能正常化的首次证明
- 【桌面运维】Windows下共享打印机能连接到却打印不了【已解决】
- 人工智能(numpy)—— 数据分析
- java 流程引擎_Activiti流程引擎对象及配置原理解析
- Java常用类System、Math和File类
- 2021-09-27 Android AEE简单介绍以及如何抓第三方app 的exception
- Glide centerCrop fitCenter和ImageView的scaleType的关系,互相影响的探讨
- STL中便捷的bitset