GOF设计模式的定义和分类


  • 设计模式的出现可以让开发人员站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的设计和开发,以便于开发出具有更好的灵活性和可拓展性,以便易于复用的软件系统。

  • GOF:Gang of Four。创立23种设计模式的四位创始人。


1> 设计模式的定义

  • 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

  • 面向对象设计模式是“好的面向对象设计”,即是那些可以满足“应对变化,提高复用”的设计。


2> 设计模式的基本要素


2.1 模式名称

  • 模式名称通过一两个词来描述模式的问题,解决方案和效果,以便用户更好地理解并方便开发人员之间的交流,一般模式是根据其功能或模式结构来命名的。

2.2 问题

  • 问题是描述了应该在何时使用模式,包含了原始设计中存在的问题以及问题存在的原因。一般是一些特定的设计问题。

2.3 解决方案

  • 解决方案描述了设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和写作方式。模板是一个通用的模板,可以适用于不同的场合。

2.4 效果

  • 效果描述了模式的应用情况以及在使用设计模式时应权衡的问题。

3>重新认识面向对象

  • 从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所帶来的影响减为最小

  • 从微观层面来看,面向对象的方式更强调各个类的“责任”,新增员工类型不会影响原来员工类型的实现代码一这更符合真实的世界,也更能控制变化所影响的范围,华竟Engineer类不应该为新增的“钟点工”来买单…


3.1 对象是什么?

  • 从概念层面讲,对象是某种拥有责任的抽象。
  • 从规格层面讲,对象是一系列可以被其他对象使用的公共接口。
  • 从语言实现层面来看,对象封装了代码和数据。

4> 从设计原则到设计模式

针对接口编程,而不是针对实现编程

  • 客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。

优先使用对象组合,而不是类继承

  • 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

封装变化点

  • 用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,使来会对另一侧产生不良的影响,从需实现层次间的松耦合。

使用重构得到模式设计——模式的应用不宜先入为主

  • 一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的"Refactoring to Patterns"是目前普遍公认的最好的使用设计模式的方法。

5> 模式分类

  • 从目的来看:

    • 创建型(Creational) 模式: 负责对象创建。
    • 结构型( Structural)模式: 处理类与对象间的组合。
    • 行为型( Behavioral)模式: 类与对象交互中的职责分配。
  • 从范围来看:

    • 类模式处理类与子类的静态关系。
    • 对象模式处理对象间的动态关系。

01 GOF设计模式的定义和分类相关推荐

  1. 设计模式简介及GoF 23种模式的分类(两种分类方式)

    一.设计模式(Design Patterns)简介: 设计模式代表了最佳实践,通常被有经验的面向对象的开发人员使用. 设计模式是程序猿在软件开发过程中面临的一般问题的解决方案. 设计模式是一套反复使用 ...

  2. 23种GoF设计模式的分类

    GoF设计模式一共有23个.一般可以按目的和作用范围来进行划分,具体划分方法如下: 第一,这些模式按目的(即完成什么样任务)来划分为创建型.结构型和行为型这三种模式: 创建型:用来创建对象.单例.原型 ...

  3. 计算机网络01:因特网概述、三种交换方式、计算机网络定义和分类、计算机网络的性能指标、计算机网络体系结构

    学习链接: 湖科大教书匠 因特网概述 网络:由若干节点和连接这些节点的链路组成 互连(联)网:多个网络通过路由器互连起来,构成一个覆盖范围更大的网络,即互连(联)网:因此互联网是"网络的网络 ...

  4. GoF设计模式之代理设计模式

    该文章首发于GoF设计模式-代理模式 概述 代理模式(Proxy Pattern),为其他对象提供一种代理以控制对这个对象的访问. 代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可 ...

  5. sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...

    软件项目实训及课程设计指导--如何应用GOF设计模式中的构建者模式创建复合对象实例 1.GOF设计模式中的构建者模式 构建者设计模式能够将一个复杂对象(它一般为组合类)的构建过程与它的表示部件相互分离 ...

  6. (转):GOF设计模式趣解(23种设计模式)

    GOF设计模式趣解(23种设计模式) 创建型模式 1.FACTORY--追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务 ...

  7. 函数式编程会取代GoF设计模式吗?

    自从我去年开始学习F#和OCaml以来,我已经阅读了大量文章,这些文章坚持认为设计模式(尤其是Java语言)是命令式语言中缺少功能的变通方法. 我发现一篇文章提出了相当有力的主张 : 我遇到的大多数人 ...

  8. GoF设计模式(二)-行为型模式简介

    文章目录 复用决策与扩展决策的行为 由具体子类决定 Template 模板行为 由其他类的对象决定 Strategy 策略(库)行为 State 状态(机)行为 由具体子类决定与其他类的对象决定 Vi ...

  9. 总结:GoF设计模式及应用

    2019独角兽企业重金招聘Python工程师标准>>> GoF设计模式 Christopher Alexander 说过:"每一个模式描述了一个在我们周围不断重复发生的问题 ...

  10. 探索编程语言的本质:了解编程语言的定义与分类

    前言: 由于我看了一眼我的粉丝列表,发现好像关于开发语言的童鞋占比较多哈,所以出一下这篇专栏. 要关注的小伙伴可以提前订阅哈. 目录 前言: 引言 1.1. 编程语言的重要性 1.2. 本文的目的与结 ...

最新文章

  1. winxp 连接linux ftp,Linux和XP之间使用FTP互传文件
  2. 【控制】如何入门自动控制理论
  3. arcgis-“一个或多个已经添加图层的范围与关联空间参考不一致”“Arcmap不能绘制一个或者多个图层”
  4. Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
  5. vmware虚拟机linux 桥接,linux之使用VMWare的桥接模式使主机和虚拟机中系统进行通讯...
  6. nginx 获取header 请求参数_Nginx设置Header头信息
  7. c++调用求平方根函数_如何使用java语言求一个正整数的平方根?(不使用库函数)...
  8. c语言oj1124,程序设计入门——C语言 第2周编程练习 1时间换算(5分)
  9. linux 驱动 printk 输出变量格式
  10. txt乱码怎么恢复正常_键盘乱码怎么恢复
  11. chromium thirt_party skia编译shared_liberary
  12. 利润表模板excel_分享用了8年的excel记账系统,一键录入,多表生成,记账很简单...
  13. 【超强教程】MapGIS如何入门及体验?
  14. 新概念二册 Lesson 29 Taxi!出租汽车! (复习现在完成时)
  15. 产业安全专家谈丨数字经济高速发展,数据要素安全该如何保障?
  16. 手把手教你部署Docker(手撸官网)
  17. Alist+RaiDrive将你的云盘本地化
  18. UE5 虚幻引擎学习资源汇总
  19. clojure实现邮箱发送
  20. 黑马程序员---Java 容器集合

热门文章

  1. 计算机基础知识大全100,计算机基础知识汇总
  2. 华为网络技术大赛模拟题答案详解
  3. Java本地缓存技术选型(Guava Cache、Caffeine、Encache)
  4. 复变函数 —— 2. 复函数的导数与复变函数的导数(柯西黎曼方程)的定义
  5. 数据库-常见面试题汇总
  6. “一天搞懂深度学习”笔记
  7. Python源码剖析(四)字符串对象
  8. HLS ug871学习
  9. 汇川技术小型PLC梯形图编程系列教程(零):梯形图编程学习指南
  10. Vivado使用流程(文字总结)