设计模式Base

设计模式是在软件开发过程中总结出来的一些经验,它们大多数都遵循一些基本原则:

  1. 单一职责原则(SRP):一个类应该只有一个引起它变化的原因。也就是说,一个类应该只有一个职责。
  2. 开放封闭原则(OCP):软件实体应该对扩展开放,对修改关闭。也就是说,当需求发生变更时,我们应该通过添加新的代码来扩展现有功能,而不是直接修改现有代码。
  3. 里氏替换原则(LSP):子类型必须能够替换掉它们的父类型。也就是说,在使用继承时,派生类应该替换掉基类,并且基于基类编写的代码无需修改就能够正常运行。
  4. 依赖倒置原则(DIP):抽象不应该依赖于具体实现,具体实现应该依赖于抽象。也就是说,高层模块不应该依赖于低层模块的具体实现,而是依赖于抽象接口。
  5. 接口隔离原则(ISP):客户端不应该依赖于它不需要的接口。也就是说,我们应该将多个不同的接口拆分成更小、更具体的接口,这样客户端只需要依赖于它们所需要的接口即可。
  6. 迪米特法则(LoD):一个对象应该对其它对象保持最少的了解。也就是说,一个类应该尽可能地减少对其他类的依赖关系,使得系统更加松耦合。

这些原则都是为了让我们编写的代码更具有可维护性、可扩展性和可复用性。在设计模式的使用过程中,我们也要遵循这些原则,这样才能保证我们的代码质量更高,更易于维护和扩展。

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

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

相关文章

Everything搜索无法搜索到桌面的文件(无法检索C盘 或 特定路径的文件)

现象描述 在Everything搜索框中输入桌面已存在的文件或随便已知位置的文件,无法找到。 搜索时检索结果中明显缺少部分磁盘位置的,例如无法检索C盘,任意关键字搜索时结果中没有位于C盘的,无论怎样都搜不到C盘文件。 解决方法 在…

CentOS搭建FTP服务器教程

CentOS搭建FTP服务器教程 在互联网时代,文件传输是日常工作中不可或缺的一部分。FTP(文件传输协议)作为一种标准的网络协议,被广泛用于在互联网上传输文件。本文将详细介绍如何在CentOS系统上搭建FTP服务器,以便您能轻…

L1 Simple_ReAct_Agent

参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph,以下为代码的实现。 Basic ReAct Agent(manual action) import openai import re import httpx import os from dotenv import load_dotenv, find_dotenvOPENAI_API_KEY os.getenv(OPEN…

pip install .自己构建工程文件报错error: subprocess-exited-with-error解决办法

有时我们直接使用pip install xxx安装某个三方文件时候会发现安装不了,会报各种问题。 这时候我们只能通过下载源码自己手动编译。 等我们下好源码开始编译的时候又会出现很多问题。 下面就举一个栗子作为解决问题的思路: 比如我我想要安装diff-gaussian-rasterization,直…

python 66 个冷知识 0712

66个有趣的Python冷知识 字典合并 从Python 3.9开始,可以使用 | 操作符合并字典。 多继承 Python支持多继承,类可以继承多个父类。 ABC模块 abc 模块提供了定义抽象基类的工具。 泛型 typing 模块提供了泛型支持。 类型别名 使用 typing 模块可以创建…

DP讨论——设计模式怎么来的?

眼中没有设计模式,代码里就找不到设计模式 几年前还在搞c开发,觉得设计模式离我太遥远,而且觉得设计模式太复杂太高大上,比较恐惧。 后来接触了oopc(接触了rtthread整个都是oopc实现的rtos),再…

LTE系统OFDM符号持续时间计算

LTE系统OFDM符号持续时间计算 给定等式:7个OFDM符号的持续时间 0.5ms(1个slot) - 160Ts - 6144*Ts 其中: 1个slot 0.5msTs是LTE系统的基本时间单位 步骤分解 理解时间资源结构: 1个无线帧 10ms1个子帧 1ms 2个slot1个slot 0.5ms1个…

Spring Boot Vue 毕设系统讲解 9 【Spark】

SuppressWarnings("serial") Configuration ConfigurationProperties(prefix"spark") public class SparkConfig implements Serializable {//spark的安装地址private String sparkHome ".";//应用的名称private String appName "mySpar…

图像识别和目标检测在超市电子秤上的应用

目录 前言深度学习的目标检测图像识别技术视觉秤的优势其他应用场景中的技术应用未来展望 前言 随着科技的不断发展,电子秤在生鲜超市中的应用也在不断升级。传统的电子秤需要打秤人员手动输入秤码,这不仅耗时费力,还需要大量的培训以记住各…

Rust编程-泛型、Trait和生命周期

泛型: 泛型是类型编程中的一种工具。本质上是类型的变量,目的是提高代码的复用。泛型是 具体类型或其他属性的抽象替代。 为了复用,我们会使用函数将功能封装,同样,泛型也是为了复用,只不过是为了类型的复用…

工业大数据是什么?应用工业大数据时面临哪些挑战?

在当今快速发展的工业领域,大数据已成为推动企业转型升级的核心动力。工业大数据,以其独特的价值和潜力,正逐渐改变着传统的生产、管理和决策模式。然而,伴随着大数据的快速发展,一系列挑战也随之浮现。本文将深入探讨…

算法日常练习

对于这个题&#xff0c;如何处理同一个方向的问题&#xff0c;且对于同一组的如果间隔太大如何实现离散化 #include<bits/stdc.h> using namespace std;#define int long long typedef long long ll; map<pair<int,int>,vector<pair<ll,ll>>> mp…

关于机械键盘的购买,该怎么选择?

一.关于轴体的选择。 1.青轴&#xff1a;青轴是机械键盘最有段落感的轴&#xff0c;声音比较大&#xff0c;以吵死人别人著称。有人将其比喻为Cherry的春天&#xff0c;爽快清脆的段落感如春天般舒畅。适合在宿舍、咖啡厅&#xff0c;图书馆使用。&#xff08;我装的 &#xf…

C++ STL std::lexicographical_compare用法和实现

一&#xff1a;功能 按字典顺序比较两个序列&#xff0c;判断第一个序列是否小于(或大于)第二个序列 二&#xff1a;用法 #include <compare> #include <vector> #include <string> #include <algorithm> #include <iostream> #include <fo…

linux源码安装mysql8.0的小白教程

1.下载8.x版本的mysql MySQL :: Download MySQL Community Server (Archived Versions) 2.安装linux 我安装的是Rocky Linux8.6 3.设置ip地址,方便远程连接 使用nmcli或者nmtui设置或修改ip地址 4.使用远程连接工具MobaXterm操作: (1)将mysql8版本的压缩包上传到mybaxterm…

数据建设实践之大数据平台(三)安装hadoop

安装hadoop 上传安装文件到/opt/software目录并解压 [bigdata@node101 software]$ tar -zxvf hadoop-3.3.5.tar.gz -C /opt/services/ 配置环境变量 [bigdata@node101 ~]$ sudo vim /etc/profile.d/bigdata_env.sh export JAVA_HOME=/opt/services/jdk1.8.0_161 export ZK…

一图看懂 | 蓝卓油气行业解决方案

我国是全球最大的能源消费国&#xff0c;保障国家能源安全是我国能源发展的首要任务&#xff0c;油气作为我国能源体系的重要组成部分&#xff0c;是支撑我国工业和经济社会发展的基础和“压舱石&#xff0c;也是必须筑牢的能源安全底线。 蓝卓根据油气田行业发展趋势&#xf…

前端实现一键复制功能

1、下载插件 npm i vue-clipboard32.0.0 2、在需要复制的文件中引入插件并使用&#xff1a; JS: import useClipboard from "vue-clipboard3"; const { toClipboard } useClipboard(); HTML: <el-tooltip content"复制内容" placement"top&…

算法面试题_字节

问题一&#xff1a;Transfomer矩阵维度分析及MultiHead详解&#xff1a; 细致链接1 细致链接2 问题二&#xff1a;transformer的结构&#xff0c;流程&#xff0c;维度变换&#xff0c;encoder&#xff0c;decoder&#xff1a; 多头维度怎么变化&#xff1a;先在q&#xff0…

自然语言处理基本概念

自然语言处理基本概念 所有学习循环神经网络的人都是看这一篇博客长大的&#xff1a; https://colah.github.io/posts/2015-08-Understanding-LSTMs/ import jieba import torch from torch import nns1 "我吃饭了&#xff01;" s2 "今天天气很好&#xff01…