大话设计模式之迪米特法则
迪米特法则,也称为最少知识原则(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"-->…...
4个关键步骤解决Calibre中文路径乱码难题
4个关键步骤解决Calibre中文路径乱码难题 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址: https://gitcode.com/gh_m…...
知识管理新范式:跨平台无缝迁移与团队协作效能提升指南
知识管理新范式:跨平台无缝迁移与团队协作效能提升指南 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本,也可以自己运行或参与开发。源项…...
反步法Backstepping在非线性系统自适应控制中的数学艺术
1. 反步法Backstepping的数学艺术 第一次接触反步法时,我被它精妙的数学构造深深吸引。这就像玩俄罗斯套娃,通过层层递进的方式,逐步构建出整个控制系统的稳定性。反步法的核心思想,是通过设计虚拟控制量,将复杂的非线…...
基于YOLOv8深度学习的驾驶员分心行为实时检测与语音预警系统【python源码+Pyqt5界面+数据集】
1. 项目背景与核心价值 开车时低头看手机、点烟、喝饮料这些看似平常的小动作,每年导致全球超过120万起交通事故。我去年参与某物流车队安全系统升级时,亲眼见过一个司机因为伸手拿水杯导致车辆偏离车道的事故录像——整个过程不到3秒。这正是我们开发这…...
HarmonyOS6 ArkTS List 设置编辑模式
文章目录一、功能概述二、官方核心知识点1. 编辑模式实现原理2. 列表数据驱动3. 列表项操作三、完整可运行代码四、代码功能详解1. 编辑模式状态控制2. 编辑按钮切换3. 列表项动态显示删除按钮4. 删除列表项5. LazyForEach 高性能渲染五、运行效果总结一、功能概述 List 编辑模…...
vLLM-v0.17.1行业落地:法律科技公司合同关键条款抽取与风险提示服务
vLLM-v0.17.1行业落地:法律科技公司合同关键条款抽取与风险提示服务 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,最初由加州大学伯克利分校的天空计算实验室开发,现已发展成为社区驱动的开源项目。这个框架…...
为什么92%的Python WASM尝试失败?——资深编译器工程师披露LLVM-WASI链路5大隐性断点
第一章:Python WASM部署的现状与认知误区WebAssembly(WASM)正迅速成为浏览器端高性能计算的新基石,但将 Python 部署至 WASM 环境仍存在显著的认知断层。许多开发者误以为“Python 代码可直接编译为 WASM”,实则 Pytho…...
NaViL-9B实战手册:健康检查API与服务异常定位全流程
NaViL-9B实战手册:健康检查API与服务异常定位全流程 1. 平台概览 NaViL-9B是由专业AI研究机构开发的原生多模态大语言模型,能够同时处理纯文本问答和图片理解任务。该模型特别针对中文场景优化,支持中英文混合输入,为开发者提供…...
Fun-ASR-MLT-Nano-2512快速上手:Web界面操作,无需代码基础
Fun-ASR-MLT-Nano-2512快速上手:Web界面操作,无需代码基础 1. 语音识别新选择:Fun-ASR-MLT-Nano-2512 1.1 模型简介 Fun-ASR-MLT-Nano-2512是阿里通义实验室推出的轻量级多语言语音识别模型,经过开发者by113小贝的二次开发优化…...
从 0 开始讲透 C++ Lambda(对标 Java)
在写 C 多线程或 STL 时,经常会看到这样的代码:std::thread t([]{ std::cout << "Hello C Thread\n"; });很多人第一反应:这 [] 是什么?为什么和 Java 不一样?一、先给结论(先建立整体认知…...
