李建忠老师-设计模式

2023-11-02

前言(1)

课程目标
	理解松耦合设计思想
	掌握面向对象设计原则
	掌握重构技法改善设计
	掌握GOF核心设计

补充:GOF(Gong of Gour)就是四人帮的全称.下面这本书的作者。

Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)

常用英文单词注释

通常所说的设计模式隐含的表示“面向对象设计模式”,但这并不意味着“设计模式“就等于”面向对象设计模式“。

面向对象的底层思想

* 语言构造
* 编译转换
* 内存模型
* 运行时机制

面向对象的抽象思维

* 面向对象
* 组件封装
* 设计模式
* 架构模式

面向对象的三大机制

 * 封装,隐藏内部实现代码
 * 继承,复用现有代码
 * 多态,改写对象行为

如何能适应这些机制来表达现实世界,掌握什么是“好的面向对象的设计”

如何解决复杂性

1、分解

2、抽象

前言(2)

为什么要面向对象,或者说怎么理解面向对象呢?

* 从宏观层面讲,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。
* 从微观层间讲,面向对象的方式更强调各个类的“责任”。
			  由于需求变化导致的新增类型不应该影响原来类型的实现,即各司其职。

那么,什么是对象呢?

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

面向对象设计的八大原则

* 1、依赖倒置原则(DIP)
* 2、开放封闭原则(OCP)
* 3、单一职责原则(SRP)
* 4、Liskov替换原则(LSP)
* 5、接口隔离原则(ISP)
* 6、优先使用对象组合,而不是类继承
* 7、封装变化点
* 8、针对接口编程,而不是针对实现编程

1、依赖倒置原则(DIP)

高层模块(稳定)不应该依赖于底层模块(变化),二者偶应该依赖于抽象(稳定)。
抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。

2、开放封闭原则(OCP)

对扩展开放,对更改封闭。
类模块应该是可扩展的,但是不可修改。

3、单一职责原则(SRP)

一个类应该仅有一个引起它变化的原因
变化的方向隐含着类的责任

4、Liskov替换原则(LSP)

子类必须能够替换它们的基类(也就是侯捷老师提到过的 is a 的关系)
继承表达类型抽象

5、接口隔离原则(ISP)

不应该强迫客户程序以来它们不用的方法。
接口应该小而完备

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

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

7、封装变化点

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

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

不将变量类型声明为某个特定的具体类,而是声明为某个接口。
客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。
减少系统中各个部分的依赖关系,从而实现“高内聚,容耦合”的类型设计方案

GOF-23模式分类

组件协作:
*  1、模板方法	Template Method
*  2、策略模式	Strategy
*  3、观察者模式	Observer / Event

单一职责:
*  4、装饰模式	Decorator
*  5、桥模式	Bridge

对象创建:
*  6、工厂方法	 Factory Method
*  7、抽象工厂	 Abstract Factory
*  8、原型模式	Prototype
*  9、构建器	Builder

对象性能
* 10、单件模式	Singleton
* 11、享元模式	Flyweight

接口隔离
* 12、门面模式	Façade
* 13、代理模式	Proxy
* 14、适配器	Adapter
* 15、中介者	Mediator

状态变化
* 16、状态模式	 State
* 17、备忘录	Memento

数据结构
* 18、组合模式	Composite
* 19、迭代器	Iterator
* 20、职责链	Chain of
			Resposibility

行为变化
* 21、命令模式	Command  
* 22、访问器	Visitor

领域问题
* 23、解析器	Interpreter
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

李建忠老师-设计模式 的相关文章

  • JavaScript的设计模式解析——工厂模式

    这几天一直在看 JavaScript高级程序设计 在第六章面向对象的程序设计中 自我感觉对于小白而而言 会一定程度的难以理解 什么意思啊 根本不明白哇等等 注意 大神请略过 小小码农 不敢妄言 首先 我们开门见山 什么是工厂模式 工厂模式能
  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • 计算资源合并模式——云计算架构常用设计模式

    背景 云计算的解决方案中 最初设计可能有意遵循关注点分离的设计原则 把操作分解为独立的计算单元以便可以单独托管和部署 然而 虽然这种策略可以帮助简化解决方案的逻辑实现 但是在同一个应用程序中要部署大量的计算单元 这会增加运行时的托管成本 并
  • 设计模式——导论

    作为软件开发人员 我们在平时工作的过程中 往往需要编写很多的代码来实现我们的需求 很多的时候会造成代码臃肿和代码冗余的情况 这个时候我们需要引入一个理念 设计模式 设计模式存在的意义在于 1 使得我们的代码更加精炼 2 使我们代码的可读性更
  • 设计模式学习之装饰器模式

    装饰器 Decorator 模式跟适配器 Adapter 模式一样 属于构建型设计模式 在学习适配器模式的时候说过 适配器模式的重点在复用能力 装饰器模式的重点在扩展能力 换言之 装饰器模式是先复用后扩展 这也导致了很多人跟适配器模式混淆
  • 设计模式一之简单工厂模式

    生活示例 刻板印刷 gt 活字印刷举例 喝酒唱歌 人生真爽 gt 对酒当歌 人生几何 可维护 需要修改 则只需要改需要改的字即可 可复用 字体可在后来的印刷复用 可扩展 需要加字 只需要加入相应的刻字即可 灵活性好 字的排列可能竖排或横排
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • Java设计模式之装饰者设计模式Decorator Pattern

    目录 一 基本概念 二 结构 1 图示 三 案例演示 被装饰对象的基类 一个接口 有cost 和description 两个抽象方法 具体被装饰的对象 实现上面这个接口 装饰者抽象类 基类 实现drink接口 具体的装饰者类 糖 具体装饰者
  • 程序员必知的23种设计模式之组合模式

    文章目录 1 模式引出 学校院系展示需求 1 1 传统方案 1 2 传统方案问题分析 2 组合模式基本介绍 2 1 方案修改 3 组合模式解决的问题 4 组合模式的注意事项和细节 1 模式引出 学校院系展示需求 编写程序展示一个学校院系结构
  • 设计模式——State(状态)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 应用举例 4 1 State TcpState 4 2 Context TcpConnection 4 3 ConcreteState ListeningTcp
  • DDD专家张逸:构建领域驱动设计知识体系

    张逸 读完需要 5分钟 速读仅需 2 分钟 领域驱动设计专家 曾就职于 ThoughtWorks 作为 Lead Consultant 为客户提供架构设计 大数据分析 持续交付 代码质量 敏捷管理等咨询服务 著译作包括 软件设计精要与模式
  • JavaScript设计模式-02-单例模式

    Javascript 设计模式 02 单例模式 简介 单例就是保证一个类只有一个实例 实现的方法一般是先判断实例是否存在 如果存在直接返回 如果不存在就创建了再返回 确保了一个类只有一个实例对象 在JavaScript里 单例作为一个命名空
  • 设计模式(不懂)

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 谁能想到Java多线程设计模式竟然能被图解,大佬就是大佬,太牛了

    设计模式 Design pattern 代表了最佳的实践 通常被有经验的面向对象的软件开发人员所采用 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 系列一、 单例设计模式

    一 单例设计模式 1 1 概述 单例模式 Singleton Pattern 是Java中最简单的设计模式之一 这种类型的设计模式属于创建者模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并

随机推荐

  • [007]爬虫系列

    一 备注 在阅读此文章前 请先阅读前两篇 007 爬虫系列 猿人学爬虫攻防大赛 第五题 js混淆 乱码增强 上 007 爬虫系列 猿人学爬虫攻防大赛 第五题 js混淆 乱码增强 中 本篇文章某个流程出了问题 即 直接贴代码 最后可能返回40
  • eclipse怎么查看开发包jar里源代码

    最近我打算学习一下谷歌的类库Guava 下载了Guava r09 jar包及其源码 为了可以方面的 看其源码 我将其源码导入 下面是导入的方法 我用的是eclipse 在Eclipse查看开发包jar源码的方法如下 1 选择项目 右键中单击
  • QDialog的相关API函数

    目录 常用的一些 API 函数 QDialog 的子类 QMessageBox QFileDialog QFont 字体类 QColorDialog QInputDialog QProgressDialog 总结 QDialog是Qt框架中
  • 单片机之瑞萨RL78 串口通信的例子

    瑞萨RL78 串口通信 瑞萨RL78 G1D单片机的串口收发数据的例子 在此示例中 我们将使用串口0 波特率为9600 include rl78g1d h define UART0 RECEIVE BUFFER U0RBR define U
  • SpringBoot集成Hasor-Dataway数据查询接口

    目录 一 前言 1 Hasor Core Core 容器框架 设计思想 特性 2 Hasor Web Web 框架 3 Hasor DB JDBC 框架 特性 4 Hasor DataQL DataQL 服务查询引擎 设计思想 特性 数据类
  • python中print的本质_python数据分析、挖掘常用工具,让你看到不一样的数据分析...

    Python语言 简要概括一下Python语言在数据分析 挖掘场景中常用特性 列表 可以被修改 元组 不可以被修改 字典 结构 集合 同数学概念上的集合 函数式编程 主要由lambda map reduce filter 构成 Python
  • 用两个stack实现queue

    stack和queue都是一种线性结构 要用stack实现queue的push和pop方法 我们首先需要了解下这两种结构的特点 stack 数据先进后出 queue 数据先进先出 我们记两个stack分别是head tail 我们的想法是这
  • Vue3中toRef函数与toRefs函数

    在Vue 3中 toRef和toRefs用于处理响应式数据 toRef函数接受一个响应式对象和一个键 返回一个只读的Ref对象 这意味着当原始数据发生变化时 toRef创建的Ref对象也会更新 toRefs函数接受一个响应式对象 react
  • C语言中如何不通过第三变量交换a、b两个变量值

    要求不能使用第三变量来达到交换两个变量值呢 方法一 include
  • vue拖拽组件(app移动端)

    vue拖拽组件
  • 09-多窗口切换-window_handles

    1 常用方法 使用背景 有些网站点击链接会新打开一个tab 如下图打开了两个浏览器窗口 元素定位正确 调试时一直报错 原因是未切换到对应的窗口句柄 切换到对应的窗口句柄才可以正常操作 current window handle 获得当前窗口
  • 联想拯救者Y7000P2023 Ubuntu20.04网卡驱动AX211安装

    sudo apt install flex bison git clone https github com intel backport iwlwifi git cd backport iwlwifi cd iwlwifi stack d
  • 2021年字节跳动74道高级程序员面试,附大厂真题面经

    安卓开发大军浩浩荡荡 经过近十年的发展 Android技术优化日异月新 如今Android 11 0 已经发布 Android系统性能也已经非常流畅 可以在体验上完全媲美iOS 但是 到了各大厂商手里 改源码 自定义系统 使得Android
  • 树的序列化与反序列化java - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 为什么引入这个概念 在计算机中 如果我们如果想要可视化一棵树 那会是非常困难的工作 所以 我们就想到了一种最简单的方法来表示一棵树 而且只使用字符串 也可以区分每一颗
  • 如何使用DedeCMS制作网站首页轮播图?

    使用 DedeCMS 制作网站很多年了 做过不少网站 也为不少 DedeCMS 网站解决过不少小问题 轮播图 或者叫幻灯片 是每个网站 首页 都有的元素了 DedeCMS 并没有像有些网站管理程序一样 提供一个直接管理网站轮播图的功能 好几
  • 使用wget命令下载父目录下的整个子目录

    使用wget命令下载父目录下的整个子目录 命令如下 wget r level 0 E ignore length x k p erobots off np N http www remote com remote presentation
  • sqli-labs/Less-62

    欢迎界面提示我们一共由130次机会 而且还是以id作为注入点 每次重置都会随机分配表名 字段名 表格数据 首先判断注入类型 输入id 1 and 1 2 回显如下 说明不属于数字型 接着输入1 回显如下 没有回显 说明注入点带有单引号 佐证
  • 【研发必备】45 个 Git 经典操作场景,专治不会合代码

    git对于大家应该都不太陌生 熟练使用git已经成为程序员的一项基本技能 尽管在工作中有诸如 Sourcetree这样牛X的客户端工具 使得合并代码变的很方便 但找工作面试和一些需彰显个人实力的场景 仍然需要我们掌握足够多的git命令 下边
  • 6打印文件

    原题链接 满分 华为OD机试真题2023 JAVA 打印文件 若博豆的博客 CSDN博客 本来以为需要用map 还复习了一下语法 原来不需要 用vector存三元数组 两个pair嵌套就可以 include
  • 李建忠老师-设计模式

    前言 1 课程目标 理解松耦合设计思想 掌握面向对象设计原则 掌握重构技法改善设计 掌握GOF核心设计 补充 GOF Gong of Gour 就是四人帮的全称 下面这本书的作者 Design Patterns Elements of Re