GoF设计模式一共有23个。一般可以按目的和作用范围来进行划分,具体划分方法如下:

第一,这些模式按目的(即完成什么样任务)来划分为创建型、结构型和行为型这三种模式:

创建型:用来创建对象。单例、原型、抽象工厂、建造者、工厂方法这五个都属于这一分类。这种类别起到了将对象的创建与其使用进行分离解耦。

结构型:用来处理类或对象之间如何组合以构成更大的结构体。桥接、装饰、适配器、代理、外观、享元、组合这七个属于这一类。

行为型:用来处理类或对象之间如何交互和分配职责。模板方法、解释器、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录这11个属于这一类。

第二,按其是用到类上还是对象上来划分,可以分为类和对象两种模式。

类模式:主要用来处理类与其子类之间继承关系,这种关系是编译时确定的,运行时是静态和不变的。工厂方法、模板方法、(类)适配器、解释器这四个属于这一种。

对象模式:用于处理对象之间的组合或者聚合关系,运行时可以变化,是动态的。其他的19种都属于这一模式。具体见下图。

将这两种分类方法作为纵横方向,可以将具体的模式分类列一个表如下。

23种GoF设计模式分类表

    目的

范围

创建型/Creational

结构型/Structural

行为型/Behavioural

类型/Class

工厂方法/Factory Method

适配器(类)/Adapter(class)

解释器/Interpreter

模板方法/Template method

对象型/Object

单例/Singleton

原型/Prototype

抽象工厂/Abstract Factory

建造者/Builder

桥接/Bridge

装饰/Decorator

代理/Proxy

外观/Facade

享元/Flyweight

组合/Composite

适配器(对象)/Adapter(object)

职责链/Chain of Responsibility

命令/Command

观察者/Observer

中介者/Mediator

状态/State

访问者/Visitor

迭代器/Iterator

备忘录Memento

策略/Strategy

 

注意:一般初学者,因为记起来比较难记,本人原来是按照取每种模式的第一个字的谐音构成一句话来记忆,后面带有中划线的斜体的是类模式,虽说有些不正经、但是效果明显。如果深入理解了,就会很自然地根据名字划分,不需要这么记忆。

创建型:单元抽建 ——> 单例、原型、抽象工厂、建造者、工厂方法

结构型:乔装(后)呆(在)外(面)像祖(爷) ——> 桥接、装饰、代理、外观、享元、组合、适配器(对象或者类)

行为型:除过前面的都是行为型。或者如下:

知名观众装碟防被测(试带有)芥末 ——> 职责链、命令、观察者、中介者、状态、迭代器、访问者、备忘录、策略、解释器、模板方法

 
 

最新文章

  1. SQL Server 深入解析索引存储(中)
  2. [IOS初学]ios 第一篇 storyboard 与viewcontroller的关系
  3. jq pagination分页 全选、单选的思考
  4. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(三)
  5. find the peak value
  6. java 零碎1
  7. Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
  8. spring security源码分析之一springSecurityFilterChain
  9. poj 1364 King(差分约束)
  10. 安卓开发中使用Genymotion模拟器
  11. javascript对象的理解
  12. Min Stack 解答
  13. PyCharm 2017 免费 破解 注册 激活 教程(附 License Server 地址)(Python 编辑器 IDE 推荐)
  14. Webpack+vue2.0如何注册全局组件 (01)
  15. ipv6地址抓包分析
  16. MySQL系列详解七:MySQL双主架构演示-技术流ken
  17. php 中 opendir() readdir() scandir()
  18. Python datetime获取详细时间
  19. hdu3189-Just Do It-(埃氏筛+唯一分解定理)
  20. DTCMS部署错误

热门文章

  1. Andriod开发环境搭建
  2. spring cloud 面试题总结
  3. 关于 mybatis 报invalid comparison: java.util.Arrays$ArrayList and java.lang.String异常
  4. 一位年轻而优秀的.NET开发者的成长点滴
  5. data-*设置自定义属性注意事项一
  6. Java基础系列二:Java泛型
  7. SpringCloud之Hystrix-Dashboard监控,以及踩的坑...
  8. Mongo 导出为csv文件
  9. Android 常见内存泄露 & 解决方案
  10. 网络安全-主动信息收集篇第二章-二层网络扫描之nmap