大话设计模式之迪米特法则
迪米特法则,也称为最少知识原则(Law of Demeter),是面向对象设计中的一个重要原则,其核心思想是降低耦合度、减少对象之间的依赖关系,从而使系统更加灵活、易于维护和扩展。
根据迪米特法则,一个对象应该对其他对象有尽可能少的了解,只与其直接朋友进行交互。直接朋友指的是以下几种情况:
- 该对象本身
- 该对象的成员对象
- 方法参数中的对象
- 方法内部创建的对象
迪米特法则的目标在于降低类之间的耦合度,避免在一个类中引入过多的依赖,以减少系统中各个类之间的直接联系,从而减少系统的复杂性,提高系统的可维护性和灵活性。
实践迪米特法则可以通过以下几点来实现:
- 在设计类时,尽量减少类之间的直接关联,避免在一个类中直接调用另一个类的方法。
- 引入中介者或外观模式,将复杂的交互逻辑封装在一个中介对象中,减少对象之间的直接通信。
- 使用接口来定义对象之间的通信协议,而不是直接依赖具体的类。
遵循迪米特法则可以使系统更加灵活,降低代码的耦合度,提高代码的可维护性和扩展性。
#include <iostream>// 学生类
class Student {
public:Student(std::string name) : name(name) {}std::string getName() { return name; }private:std::string name;
};// 班级类
class Classroom {
public:void addStudent(Student* student) {students.push_back(student);}private:std::vector<Student*> students;
};// 学校类
class School {
public:void addClassroom(Classroom* classroom) {classrooms.push_back(classroom);}private:std::vector<Classroom*> classrooms;
};int main(int argc, char *argv[])
{// 创建学生对象Student* student1 = new Student("Alice");Student* student2 = new Student("Bob");// 创建班级对象并添加学生Classroom* classroom1 = new Classroom();classroom1->addStudent(student1);classroom1->addStudent(student2);// 创建学校对象并添加班级School* school = new School();school->addClassroom(classroom1);// 释放内存delete student1;delete student2;delete classroom1;delete school;return 0;
}/*在上述 C++ 代码中,同样实现了学生、班级和学校三个类的关系,确保每个类只与其直接朋友进行交互,遵循了迪米特法则。学生类知道自己的名字,班级类知道如何管理学生,学校类知道如何管理班级,它们之间的关系清晰明了,没有直接依赖于其他类的内部细节。这样的设计有助于降低耦合度,提高代码的可维护性和灵活性。
*/
觉得有帮助的话,打赏一下呗。。
相关文章:
大话设计模式之迪米特法则
迪米特法则,也称为最少知识原则(Law of Demeter),是面向对象设计中的一个重要原则,其核心思想是降低耦合度、减少对象之间的依赖关系,从而使系统更加灵活、易于维护和扩展。 根据迪米特法则,一…...
KSD测试系统使用方法和注意事项
①下载链接在最顶部; ②安装方法:应该先将测试设备绑定在假人身上,测试设备不能过度往下拉,传感器绑在脖子上,切记最后才开传感器开关!!!开传感器后3秒内不要碰测试设备衣服&#x…...
IT服务营销管理案例分析题
习题一 企业随着业务的蓬勃发展,所投入的基础设施资源不断增加。企业员工数倍数增长,办公场地、办公环境等要求也越来越高。 可是该企业的IT部门人员短缺,对IT管理还处于被动的“救火”阶段,每天至少15个突发故障,故障…...
NRF52832修改OTA升级时的bootloader蓝牙MAC
NRF52832在OTA升级时,修改了APP的蓝牙MAC会导致无法升级,原因是OTA程序的蓝牙MAC没有被修改所以手机扫描蓝牙时无法连接 解决办法 在bootloader的程序里面加入修改蓝牙mac地址的代码实现原理: 在bootloader蓝牙广播开启之前修改蓝牙mac 通…...
# Python 编程入门教程
欢迎来到 Python 编程入门教程!Python 是一种简单易学、功能强大的编程语言,适用于各种应用场景,从简单的脚本到大型软件开发项目。无论你是初学者还是有一定编程经验的开发者,本教程都将为你提供全面的学习路径,帮助你掌握 Python 编程的基础知识和技能。 ## 目录 1. 简…...
Sqoop【实践 02】Sqoop1最新版 全库导入 + 数据过滤 + 字段类型支持 说明及举例代码(query参数及字段类型强制转换)
Sqoop1最新版举例 1.环境说明2.import-all-tables3.query4.字段类型支持 1.环境说明 还是之前的环境: # 不必要信息不再贴出 # JDK [roottcloud ~]# java -version java version "1.8.0_251" # MySQL [roottcloud ~]# mysql -V mysql Ver 14.14 Distrib…...
第十四届蓝桥杯JavaA组省赛真题 - 特殊日期
解题思路: 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…...
《VulnHub》Lampião:1
title: 《VulnHub》Lampio:1 date: 2024-03-28 21:37:49 updated: 2024-03-28 21:37:50 categories: WriteUp:Cyber-Range excerpt: 关键技术:主机发现,端口扫描、服务探测、操作系统探测,对开放的端口探测漏洞&#x…...
RabbitMq高可用
消息队列高级 服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.2.消息持久化1.3.消费者消息确认1.4.消费失败重试机制1.5.总结 2.死信交换机2.1.初识死信交换机2.2.TTL2.3.延迟队列 3.惰性队列3.1.消息堆积问题3.2.惰性队列 4.MQ集群4.1.集群分类4.2.普通集群4.3.镜像集群…...
降本增效的车间管理大屏,车间主任看了拍手称快,速来领取。
我们老板觉得车间生产效率太低了,还想让我整一套车间管理的! 制造业管理的核心在于降本增效,车间管理可以通过【大数据可视化】来提高管理效率,大屏就可以做到生产管理一「屏」了然,这是【车间管理大屏方案】。 一、…...
Open AI要给GPT应用开发者“发钱” 黄金的宏观关系被打破了吗?
内容摘要 为避免GPTs彻底凉凉,Open AI紧急启动了一项“货币化”计划,直接给那些在GPT Store上的应用开发人员发钱。 正文部分 当地时间周四凌晨,OpenAI在社交媒体上发帖称,正在与小部分美国开发者合作,基于用户使用…...
【Docker】Docker安全与最佳实践:保护你的容器化应用程序
欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步ÿ…...
QT 信号(Signal)与槽(Slot)机制
上学后,人们问我长大了要做什么,我写下“快乐”。他们告诉我,我理解错了题目,我告诉他们,他们理解错了人生。 ——约翰列侬 一、信号(signal)与槽(slot) 在QT中,信号(signal)与槽(slot)机制是一种用于对象间通信的重要机制。它允许一个对象发出信号,而其他对象…...
音频干扰检测(频域方法)
测试音响系统的通路上是否有外部干扰时,可以通过播放1000赫兹的正弦波信号,在输出端采集数字信号(I2S,TDD,A2B)并保存为.wav文件。 然后通过以下Python代码检测。 import numpy as np import librosa im…...
Rust引用借用 vs 原始指针
let v: i32 10; let v1 &v; let a: *const i32 &v; println!("a{:p}", a); let b a as *mut i32; //无法从&v直接转换成*mut i32,需要从*const i32过度 println!("b{:p}", b); unsafe {*b1; } println!("v{} v1{}"…...
抖音视频关键词无水印下载软件|手机网页视频批量提取工具
全新视频关键词无水印下载软件,助您快速获取所需视频! 随着时代的发展,视频内容已成为人们获取信息和娱乐的重要途径。为了方便用户获取所需视频,推出了一款功能强大的视频关键词无水印下载软件。该软件主要功能包括关键词批量提取…...
关于Devc++调试的问题以及解决STL变量无法查看
目前Devc的调试主要有以下几点: 1.调试不能直接查看stl变量,会卡死不动 2.目前单步进入只能用鼠标键按 3.若想按下一步进入函数体内,要在函数体内打上断点才行 4.调试到return 0 ;上一句就停了,不会结束程序 5.目前F2跳至断点…...
MATLAB:优化与规划问题
一、线性规划 % 线性规划(Linear programming, 简称LP) fcoff -[75 120 90 105]; % 目标函数系数向量 A [9 4 7 54 5 6 105 10 8 53 8 9 77 6 4 8]; % 约束不等式系数矩阵 b [3600 2900 3000 2800 2200]; % 约束不等式右端向量 Aeq []; % 约束等式系…...
Oracal执行计划解析
概述 | Id | Operation | Name | Rows | Bytes | TempSpc | Cost (%CPU) | Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1…...
对form表单对象中数组中的字段进行校验的方法
当对form表单中,数组readings中的字段进行校验时,prop和rules绑定要写成动态的,如下代码 <div v-for"(item,index) in form.readings"><el-form-item label"上次读数" > <!--prop"scds"-->…...
一、JAVA集成海康SDK
JAVA集成海康SDK 文章目录 JAVA集成海康SDK前言一、项目依赖 jar1. examples.jar2. 项目依赖 jna.jar,可以通过 maven依赖到。二、集成SDK1.HcNetSdkUtil 海康 SDK封装类2.HCNetSDK3.Linux系统集成SDK三、总结前言 提示:首先去海康官网下载 https://open.hikvision.com/dow…...
PAT 乙级 1031 查验身份证 c语言实现
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1&am…...
LeetCode 345. 反转字符串中的元音字母
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。 示例 1: 输入:s “hello” 输出:“holl…...
go中函数与方法的区别与go中关于面向对象理解
声明方法的区别 函数是一段可以独立调用的代码块,它可以有参数和返回值。函数的声明不依赖于任何类型,可以直接通过函数名进行调用。 函数的声明格式如下: func functionName(parameters) returnType {// 函数体 }示例: func A…...
SQL Server 实验二:数据库视图的创建和使用
目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码: 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…...
树结构导入
Testpublic void testExcel1() {// 写法1:JDK8 ,不用额外写一个DemoDataListener// since: 3.0.0-beta1EasyExcelFactory.read(new File("C:\\Users\\Admin\\Desktop\\树导入.xlsx"), null, new ReadListener<Map>() {public static final int BATC…...
Promise封装ajax
Promise封装原生ajax 1.node的内置模块url, http 2.Promise封装原生ajax 01-node的内置模块 # url: 操作网址 let url require(url) url.parse(网址, [布尔值: 决定是否将查询字符串转换为对象格式]): 将网址解析成对象# http: 创建本地服务器 let http requi…...
47 vue 常见的几种模型视图不同步的问题
前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …...
以太网/USB 数据采集卡 24位16通道 labview 256K同步采样
XM7016以太网SUB数据采集卡 XM7016是一款以太网/USB高速数据采集卡,具有16通道真差分输入,24位分辨率,单通道最高采样率256ksps. 16通道同步共计4.096Msps、精密前置增益放大、集成IEPE/ICP硬件支持的特点。本产品采用了多个高精度24位ADC单元…...
python基础 | 核心库:PIL
1、读取图像信息 查看图像信息 读取同一文件夹下的文件 可加 ./可不加 rom PIL import Image img Image.open(image.jpg) # 打开图像文件(注意:是去掉文件头的纯数据) print(img.format) # 图像格式(如BMP PNG JPEG 等) print(img.size) # 图像大小(…...
网站制作公司网址/牡丹江网站seo
【天极网手机频道】今年华为开发者大会上,华为消费者业务业务CEO余承东曾预告鸿蒙OS 2.0系统将于今年12月份面向手机开发者进行少量测试,明年则会陆续向消费者开放。如今,华为官网传来消息,华为将于12月16日举行HarmonyOS 2.0手…...
一个wordpress程序搭建多个网站/seo平台是什么
最近仔细研读了苹果官网最新的设计规范。网上没有找到很满意的翻译版本,于是自己老老实实的啃了几遍官方文档,顺便把学习笔记输出给大家分享一下。这里有几点要提醒一下大家:这是简明笔记,只选了重点内容,不是通篇逐字…...
国外网站设计网站/网站推广平台搭建
最近着迷上了 Python用Python给小宝做的数学算数口算练习程序(2015年1月添加四则运算)!给小宝做的口算游戏:#用Python给小宝做的数学算数口算练习程序(2015年1月添加四则运算)!#给小宝做的口算游戏:import stringimport randominput11nums10num0righ1t0 …...
网站制作模板百度网盘/香蕉和忘忧草对焦虑的影响
PHP - 应用实例 - 语法着色 借助PHP支持的语法着色功能,可以创建批处理。php.exe -s "%1" > "%1.html"[PHP - 关键词] php[PHP - 相关论坛] http://php.board.newsmth.net/http://bbs.pku.edu.cn/, homepage看版http://forum.csdn.net/S…...
刚刚邯郸发生大事了/seo公司排名
方案一:使用360急救箱扫描打开 360安全卫士,在主界面右侧点击“功能大全(更多)”,找到并打开“系统急救箱”。等360系统急救箱安装并更新完成后,点击右侧的“系统设置修复区”点击“全选”按钮后,点击“扫描修复”按钮…...
dede织梦建站教程/seo网站设计工具
万拓超融合存储CS100-48是万拓推出的新一代48盘位云节点产品,凭借12G高性能背板、支持硬盘防震、大风量散热、嵌入式BBU、支持通用主板这些优点,很好地满足了中大型超融合系统和云存储系统的需求,产品广泛适用于公安、运营商、交通、政府、教…...