设计模式(六大原则)

目录

        设计模式(分类)        设计模式(六大原则)

设计模式的六大原则是指导面向对象软件设计的基本准则,这些原则有助于设计出易于理解、灵活、可复用和可扩展的系统。

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

原则表述: 一个类(或模块、函数)应有且仅有一个引起它变化的原因。换句话说,一个类应该只有一个职责,只有一个核心功能。

目的与效果

  • 提高内聚性:确保类的功能集中,易于理解和维护。
  • 减少耦合:单一职责的类不会因为其他无关的需求而被迫改变,降低了与其他类之间的依赖关系。

2. 开闭原则 (Open-Closed Principle, OCP)

原则表述: 软件实体(如类、模块、函数等)应当对扩展开放,对修改关闭。也就是说,允许在不修改现有代码的基础上扩展功能。

目的与效果

  • 保持稳定性:已有代码在需求变更时尽可能不受影响,减少了引入错误的风险。
  • 支持演化:通过增加新代码而非修改旧代码来适应新的需求,增强了系统的适应性和可扩展性。

3. 里氏替换原则 (Liskov Substitution Principle, LSP)

原则表述: 任何基类(父类)的实例应该能够在不改变程序正确性的情况下被其子类的实例替换。子类必须完全遵循基类的约定,不得破坏基类的封装性。

目的与效果

  • 维护继承体系的完整性:确保继承关系下的类型一致性,使得基类的使用者无需了解具体子类的实现细节。
  • 保障多态的正确性:确保在使用基类接口的地方,无论传递的是基类实例还是其子类实例,都能正确、一致地工作。

4. 依赖倒置原则 (Dependence Inversion Principle, DIP)

原则表述: 高层次模块不应该依赖于低层次模块,两者都应该依赖于抽象(接口或抽象类)。另外,抽象不应该依赖于细节,细节应该依赖于抽象。

目的与效果

  • 控制依赖方向:将高层模块与底层模块的耦合关系通过抽象进行解耦,使得系统更易于重构和测试。
  • 增强可扩展性:由于依赖于抽象,当需要替换具体实现时,只需提供符合同一抽象的新模块即可,无需修改高层模块。

5. 接口隔离原则 (Interface Segregation Principle, ISP)

原则表述: 客户端不应该被迫依赖它不需要的接口方法。一个类对另一个类的依赖应该建立在最小的接口之上。

目的与效果

  • 避免胖接口:通过将庞大的接口拆分成更小、更具体的接口,使得消费者仅需关注与自己相关的接口部分。
  • 提高接口的使用效率:减少不必要的实现负担,避免实现接口时为不使用的接口方法编写无意义的代码。

6. 迪米特法则 (Law of Demeter, LoD)

原则表述: 也称为最少知识原则,一个对象应尽可能少地了解其他对象的内部细节。对象之间应保持松散耦合,每个对象对其它对象的了解仅限于那些与本职工作密切相关的对象。

目的与效果

  • 降低耦合度:限制对象之间的交互范围,减少对象之间的直接依赖,使得系统更易于理解和维护。
  • 提高模块化程度:鼓励对象之间的协作通过中间对象或者消息传递机制来进行,避免“朋友”关系网过于庞大。

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

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

相关文章

20240329-1-SVM面试题

SVM面试题 1. SVM直观解释 SVM,Support Vector Machine,它是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;其还包括核技巧,这使它成为实质上的非线性分类…

OpenCV从入门到精通实战(二)——文档OCR识别(tesseract)

导入环境 导入必要的库 numpy: 用于处理数值计算。 argparse: 用于处理命令行参数。 cv2: OpenCV库,用于图像处理。 import numpy as np import argparse import cv2设置命令行参数 ap argparse.ArgumentParser() ap.add_argument("-i", "--imag…

计算机中的小数表示

文章目录 前言整数表示的缺陷定点小数定点小数加法乘法运算 浮点数IEEE754浮点数标准移码阶码的移码表示 IEEE754中的特殊点两个0非规格化数字正常浮点数无穷大NaN 浮点数简单举例浮点数一些其余特性浮点数计算不符合结合律浮点数舍入规则浮点数与整数之间的相互转换 总结 前言…

记录一次k8s pod之间ip无法访问,问题排查与定位

记录一次k8s pod之间ip无法访问,问题排查与定位 问题展现现象 node之间通信正常 部分node上的pod无法通信 排查有问题node 使用启动网络测试工具 环境准备 docker 数据库mysql 使用有状态副本集合 --- apiVersion: apps/v1 kind: StatefulSet metadata:anno…

生成对抗网络GAN的扩展应用理解

注:本文仅个人学习理解,如需详细内容请看原论文! 一、cycleGAN 1.整体架构: 将图片A通过生成器生成图片B,然后通过判别器判别图片B的真假;并且图片B通过另一个生成器生成A‘,让A和A’近似。 2…

C++ queue priority_queuestack 详解及模拟实现

1. stack的介绍和使用 1.1 stack的介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容…

JVM垃圾回收与算法

1. 如何确定垃圾 1.1 引用计数法 在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关 联的引用,即…

Python pyglet制作彩色圆圈“连连看”游戏

原文链接: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏(续)-CSDN博客文章浏览阅读1.6k次,点赞75次,收藏55次。上期讲到相同的色块连接,链接见: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏-…

Ai2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Adobe illustrator,常被称为“AI”,是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件。作为一款非常好的矢量图形处理工具,该软件主要应用于印刷出版、海报书籍排版、专业插画、多…

Fiddler抓包工具之高级工具栏中的Inspectors的使用

高级工具栏中的Inspectors的使用 Inspectors 页签允许你用多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片,HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合http标准的请求和响应头。Cookies标签可以看到…

手机拍照技术

拍照技巧 说明: 本文将主要介绍摄影和手机常见技巧; 1. 摄影的基本知识 **说明:**关于摄影,手机和相机的原理都是相同的,不同的是相机在很多方面优于手机,但是专业的设备对于我们这种的非专业的人来说,刚…

Linux时间同步练习

题目如下: 一.配置server主机要求如下: 1.server主机的主机名称为 ntp_server.example.com 2.server主机的IP为: 172.25.254.100 3.server主机的时间为1984-11-11 11:11:11 4.配置server主机的时间同步服务要求可以被所…

重磅,巫师3即将发布mod编辑器并开放创意工坊

热乎乎的消息!巫师3即将推出mod编辑器和开放创意工坊! 根据巫师3官方Steam消息,听说年底将推出mod编辑器,目前已经开始内测。想试用的玩家们,可以到redkit商店页面申请访问权限,体验最新的创意工具。 此外&…

存入Redis的值前面有很多空格

说明:记录一次使用Redis的错误; 场景 在将验证码存入Redis时,发现存入的值前面有很多空格,导致在与前端传入的值比较时,一直是false,验证不通过。如下: 上面这些“□”是占位符,复…

学习笔记(4月17日)vector底层原理

1.vector<vector>底层原理 vector是表示可变大小数组的序列容器&#xff0c;相当于一个动态的数组&#xff0c;比数组优越的在于它具有可动态改变的大小&#xff0c;同时&#xff0c;它写成了类模板&#xff0c;说明可以适用于其他类型&#xff0c;包括vector本身&#…

rust 学习笔记(13-19)

13 迭代器与闭包 Rust 的设计灵感来源于很多现存的语言和技术。其中一个显著的影响就是 函数式编程&#xff08;functional programming&#xff09;。函数式编程风格通常包含将函数作为参数值或其他函数的返回值、将函数赋值给变量以供之后执行等等。 闭包&#xff08;Closu…

游戏、app抓包

文章目录 协议app抓包游戏抓包 协议 在抓包之前&#xff0c;首先我们要对每个程序使用什么协议有个大致的了解&#xff0c;比如网页这种就是走的http协议。 在一些app中我们通过发送一个请求&#xff0c;然后服务器接受&#xff0c;响应&#xff0c;返回一个数据包&#xff0c…

网站模板-慈善捐赠基金会网站模板 Bootstrap4 html

目录 一.前言 二.预览 三.下载链接 一.前言 这是一个慈善网站的页面。页面包含了导航栏、横幅部分、关于、使命、新闻、活动、捐赠和页脚等不同的部分。该网站还包含了一些CSS样式和JavaScript脚本来实现交互和样式效果。 这个网站的具体结构如下&#xff1a; 导航栏部分&a…

吐血整理102个Python项目,从基础到高级,练完你就牛了!

前言 Python 初学者在迈过安装编程环境和基本语法的门槛&#xff0c;准备大展身手的时候&#xff0c;可能突然就会进入迷茫期&#xff1a; 不知道做些什么、再学些什么。。。 然后对编程的兴趣就会慢慢消退&#xff0c;找不到坚持下去的理由&#xff0c;从而慢慢淡忘之前学会…

OpenCV基本图像处理操作(九)——特征匹配

Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法&#xff0c;经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括&#xff1a; 特征提取&#xff…