设计模式之GoF23介绍

深入探讨设计模式:构建可维护、可扩展的软件架构

    • 一、设计模式的背景
      • 1.1 什么是设计模式
      • 1.2 设计模式的历史
    • 二、设计模式的分类
      • 2.1 创建型模式
      • 2.2 结构型模式
      • 2.3 行为型模式
    • 三、七大设计原则
    • 四、设计模式关系
    • 结论 :rocket: :rocket: :rocket:

在这里插入图片描述

  在软件开发领域,设计模式是一种用于解决特定问题的经验性的、可重用的设计思想。设计模式不仅是面向对象编程(OOP)的基石,更是构建可维护、可扩展软件架构的重要工具。本文将深入探讨设计模式,包括其概念、历史、分类、七大设计原则以及设计模式关系。

一、设计模式的背景

1.1 什么是设计模式

  设计模式(Design pattern)是对软件设计中普遍存在的问题的通用解决方案。它们提供了一种在特定上下文中解决问题的方法,是经过验证的、可复用的设计思想。设计模式不是代码或库,而是一种更高层次的抽象,它帮助开发者更好地组织和理解代码。

  通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。

1.2 设计模式的历史

  设计模式的概念最早由计算机科学家Christopher Alexander引入,他在建筑领域中提出了“模式语言”的概念。后来,Erich GammaRichard HelmRalph JohnsonJohn Vlissides等四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中将设计模式引入到软件开发领域。这本书通常被称为GoFGang of Four,四人组)书籍,成为设计模式领域的经典之作

二、设计模式的分类

在这里插入图片描述

2.1 创建型模式

  对象实例化的模式,创建型模式用于解耦对象的实例化过程。

  1. 单例模式:某个类智能有一个实例,提供一个全局的访问点。
  2. 工厂方法模式:一个工厂类根据传入的参量决定创建出哪一种产品类的实例。
  3. 抽象工厂模式:创建相关或依赖对象的家族,而无需明确指定具体类。
  4. 建造者模式:封装一个复杂对象的创建过程,并可以按步骤构造。
  5. 原型模式:通过复制现有的实例来创建新的实例。

2.2 结构型模式

  把类或对象结合在一起形成一个更大的结构。

  1. 装饰器模式:动态的给对象添加新的功能。
  2. 代理模式:为其它对象提供一个代理以便控制这个对象的访问。
  3. 桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。
  4. 适配器模式:将一个类的方法接口转换成客户希望的另一个接口。
  5. 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。
  6. 外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
  7. 享元模式:通过共享技术来有效的支持大量细粒度的对象。

2.3 行为型模式

  类和对象如何交互,及划分责任和算法。

  1. 策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。
  2. 模板方法模式:定义一个算法结构,而将一些步骤延迟到子类实现。
  3. 命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。
  4. 迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
  5. 观察者模式:对象间的一对多的依赖关系。
  6. 仲裁者模式:用一个中介对象来封装一系列的对象交互。
  7. 备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
  8. 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  9. 建造者模式:允许一个对象在其对象内部状态改变时改变它的行为。
  10. 责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
  11. 访问者模式:不改变数据结构的前提下,增加作用于一组对象元素的新功能。

三、七大设计原则


在这里插入图片描述

  设计模式的核心是一系列通用的原则,这些原则有助于制定良好的软件设计方案。以下是七大设计原则:

  1. 单一职责原则 (Single Responsibility Principle, SRP)

    • 一个类应该只有一个引起变化的原因。换句话说,一个类只负责一个功能领域。
  2. 开放/封闭原则 (Open/Closed Principle, OCP)

    • 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即,我们可以通过添加新的代码来扩展功能,而不必修改已有的代码。
  3. 里氏替换原则 (Liskov Substitution Principle, LSP)

    • 子类必须能够替换其基类而不影响程序的正确性。换句话说,如果一个软件实体使用了一个基类,那么替换成其子类也不应该导致程序出错。
  4. 依赖倒置原则 (Dependency Inversion Principle, DIP)

    • 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
  5. 接口隔离原则 (Interface Segregation Principle, ISP)

    • 不应该强迫一个类实现它不需要的接口。一个类对其他类的依赖应该建立在最小的接口上。
  6. 合成/聚合复用原则 (Composite/Aggregate Reuse Principle, CARP)

    • 首选使用合成/聚合而不是继承来达到复用的目的。即,通过将现有的类组合在一起创建新的功能,而不是通过继承。
  7. 迪米特法则 (Law of Demeter, LoD)

    • 一个对象应该对其他对象有最少的了解。一个类不应该直接调用其它对象的内部方法,而应该通过一个中间对象进行调用。

四、设计模式关系


在这里插入图片描述

结论 🚀 🚀 🚀

  设计模式是软件开发中的有力工具,通过提供经验丰富的解决方案,帮助开发者构建可维护、可扩展的软件系统。然而,应该在实践中谨慎使用,根据具体情况灵活运用,以避免过度工程和不必要的复杂性。设计模式不仅仅是一种技术,更是一种艺术,需要在实践中不断体悟!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法:爬楼梯(迭代和动态规划)

迭代 时间复杂度 O(n) 空间复杂度 O(1) /*** param {number} n* return {number}*/ var climbStairs function(n) {let l 0, r 0 , sum 1for(let i1; i<n; i){l rr sumsum l r}return sum }; 动态规划 时间复杂度 O(n) 空间复杂度 O(n) /*** param {number} n* r…

【密码学基础】Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…

Java面试题(每天10题)-------连载(45)

Dubbo篇 1、Dubbo的服务调用流程 2、Dubbo支持那种协议&#xff0c;每种协议的应用场景&#xff0c;优缺点&#xff1f; dubbo&#xff1a; 单一长连接和 NIO 异步通讯&#xff0c;适合大并发小数据量的服务调用&#xff0c;以及消费者远大于提供者。传输协议 TCP&#xff0c;…

Proteus仿真--射击小游戏仿真设计

本文介绍基于proteus射击小游戏仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 K1-K4为4个按键&#xff0c;用于上移、下移、确认等&#xff0c;模拟单机游戏 仿真运行视频 Proteus仿真--射击小游戏仿真设计 附完整Proteus仿真资料代码资料 …

ArcGIS界面显示分辨率调整

因为电脑显示分辨率的问题呢&#xff0c;ArcGIS的界面显示会字体显示不合适&#xff0c;出现模糊情况&#xff0c;这时候只需要做个简单的操作设置一下便可以解决&#xff01; 1、右键ArcMap的快捷启动方式。 2、对应选择兼容性——>更高DPI设置——>勾选替代DPI缩放行为…

体系化学习运筹学基础算法的实践和总结

文章目录 引言目标设计目标实践文章汇总经验总结一则预告 引言 眨眼间已经12月了&#xff0c;眼看着2023年马上要过完了。 女朋友最近总说&#xff0c;工作以后感觉时间过的好快。事实上&#xff0c;我也是这么认为的。年纪越大&#xff0c;越会担心35岁危机的降临。所以&…

Xubuntu16.04系统中使用EDIMAX EW-7822UAC无线网卡开启5G自发AP

目录 1.关于 EDIMAX EW-7822UAC2.驱动安装3.查看无线网卡信息3.通过create_ap配置5G自发AP 1.关于 EDIMAX EW-7822UAC 官网介绍 https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_ac1200_dual-band/ew-7822uac/ 详细参数…

Python开发运维:Python项目发布到K8S集群

目录 一、实验 1.Python项目发布到K8S集群 一、实验 1.Python项目发布到K8S集群 &#xff08;1&#xff09;获取应用程序代码 #把hello-python.tar.gz压缩包上传到k8s控制节点master1的root下&#xff0c;手动解压 tar zxvf hello-python.tar.gz &#xff08;2&#xff0…

【Linux】进程周边001之进程概念

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.基本概念 2.描述进程-PCB…

LeetCode5.最长回文子串

昨天和之前打比赛的队友聊天&#xff0c;他说他面百度面到这道算法题&#xff0c;然后他用暴力法解的&#xff0c;面试官让他优化他没优化出来&#xff0c;这道题我之前没写过&#xff0c;我就想看看我能不能用效率高一点的方法把它做出来&#xff0c;我一开始就在想用递归或者…

设计CPU功能的数字电路

实验目的(1)熟悉Multisim 电路仿真软件的操作界面和功能; (2)掌握逻辑电路综合设计,并采用仿真软件进行仿真。 实验内容1.试设计一个简易CPU功能的数字电路,实验至少要求采用4个74HC/HCT194作为4个存储单元(可以预先对存储单元存储数据),74HC283作为计算单元。请实现…

多维时序 | MATLAB实现RIME-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现RIME-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现RIME-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现RIME-CNN-…

idea本地调试hadoop 遇到的几个问题

1.DEA对MapReduce的toString调用报错&#xff1a;Method threw ‘java.lang.IllegalStateException‘ exception. Cannot evaluate org.apache.hadoop.mapreduc 解决方法&#xff1a;关闭 IDEA 中的启用“ tostring() ”对象视图 2.代码和hdfs路径都对的情况下&#xff0c;程序…

架构设计系列之基础:初探软件架构设计

11 月开始突发奇想&#xff0c;想把自己在公司内部做的技术培训、平时的技术总结等等的内容分享出来&#xff0c;于是就开通了一个 Wechat 订阅号&#xff08;灸哥漫谈&#xff09;&#xff0c;开始同步发送内容。 今天&#xff08;12 月 10 日&#xff09;也同步在 CSDN 上开通…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《面向微电网群的云储能经济-低碳-可靠多目标优化配置方法》

这篇文章的标题涵盖了以下关键信息&#xff1a; 面向微电网群&#xff1a;研究的重点是微电网群&#xff0c;这可能指的是多个微电网系统的集合&#xff0c;而不仅仅是一个单独的微电网。微电网是指由分布式能源资源、储能系统和智能控制组成的小型电力系统&#xff0c;通常能够…

实现加盐加密方法以及java nio中基于MappedByteBuffer操作大文件

自己实现 传统MD5可通过彩虹表暴力破解&#xff0c; 加盐加密算法是一种常用的密码保护方法&#xff0c;它将一个随机字符串&#xff08;盐&#xff09;添加到原始密码中&#xff0c;然后再进行加密处理。 1. 每次调用方法产生一个唯一盐值&#xff08;UUID &#xff09;密码…

UDS诊断 10服务

文章目录 简介诊断会话切换请求和响应1、请求2、子功能3、肯定响应4、否定响应5、特殊的NRC 为什么划分不同会话报文示例UDS中常用 NRC参考 简介 10服务&#xff0c;即 Diagnostic Session Control&#xff08;诊断会话控制&#xff09;服务用于启用服务器中的不同诊断会话&am…

(四) python门面模式

文章目录 4.1 结构型设计模式4.1.1 简介4.1.2 常见的几种结构型设计模式 4.2 理解门面设计模式4.2.1 门面设计模式概述4.2.2 门面设计模式的作用 4.3 UML类图4.3.1 门面4.3.2 系统4.3.3 客户端 4.4 门面模式的代码实现4.4.1 场景&#xff1a;4.4.2 python实现 4.5 原理&#xf…

渲染(iOS渲染过程解析)

渲染 渲染原理 一个硬核硬件科普视频 CPU和GPU CPU&#xff08;Central Processing Unit&#xff09;&#xff1a;现代计算机整个系统的运算核心、控制核心&#xff0c;适合串行计算。GPU&#xff08;Graphics Processing Unit&#xff09;&#xff1a;可进行绘图运算工作的…

安防音频接口选型的高性能国产芯片分析

在人工智能兴起之后&#xff0c;安防市场就成为了其全球最大的市场&#xff0c;也是成功落地的最主要场景之一。对于安防应用而言&#xff0c;智慧摄像头、智慧交通、智慧城市等概念的不断涌现&#xff0c;对于芯片产业催生出海量需求。今天&#xff0c;我将为大家梳理GLOBALCH…