Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)
文章目录
- 3.5 迪米特法则(DP)
- 3.5.1 概述
- 3.5.2 案例
3.5 迪米特法则(DP)
迪米特法则:Demeter Principle,简称DP
3.5.1 概述
只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。
其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。(如,学生通过中介租房,而不是直接联系房东)
迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象(即 在当前对象的方法中创建其他对象)、当前对象的方法参数(即 当前对象方法的形参是一个对象类型,调用改方法需要传入一个实际的对象)等,这些对象同当前对象存在关联、依赖、聚合或组合关系,可以直接访问这些对象的方法。
3.5.2 案例
下面看一个例子来理解迪米特法则
【例】明星与经纪人的关系实例
明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是明星的陌生人,降低了明星和粉丝以及明星和公司的耦合度,所以适合使用迪米特法则。

public class Fans {private String name;// 有参构造public Fans(String name) {this.name = name;}public String getName() {return name;}
}
=========================================================public class Star {private String name;// 带参构造public Star(String name) {this.name = name;}public String getName() { return name;}
}
==========================================================public class Company {private String name;// 有参构造public Company(String name) {this.name = name;}public String getName() {return name;}
}
===========================================================// 经纪人类,相当于第三方
public class Agent {//将粉丝、明星、公司聚合起来private Star star;private Fans fans;private Company company;public void setStar(Star star) {this.star = star; }public void setFans(Fans fans) { this.fans = fans;}public void setCompany(Company company) {this.company = company;}public void meeting(){System.out.println(fans.getName()+"与明星"+star.getName()+"见面了");}public void business(){System.out.println(company.getName()+"与明星"+star.getName()+"洽谈业务");}
}
===================================================
public class ClientTest {public static void main(String[] args) {// 创建经纪人类Agent agent = new Agent();// 创建明星类Star star = new Star("詹姆斯");agent.setStar(star);// 创建粉丝类Fans fans = new Fans("球迷");agent.setFans(fans);//创建公司类Company company = new Company("李宁公司");agent.setCompany(company);//和粉丝见面agent.meeting();//和公司洽谈业务agent.business();}
}
相关文章:
Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)
文章目录 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.5 迪米特法则(DP) 迪米特法则:Demeter Principle,简称DP 3.5.1 概述 只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to stranger…...
docker多阶段镜像制作,比如nginx镜像,编译+制作
镜像制作, nginx的源码包 把nginx源码拷贝到容器内 编译要用到gcc make , 以及扩展工具 pcre openssl # "pcre" perl compatibal regulaer expression 刚开始,可以两个终端, 一个手工操作(编译安装、拷贝、环境变量等)…...
大语言模型量化方法GPTQ、GGUF、AWQ详细原理
大语言模型量化的目的是减少模型的计算资源需求和存储占用,同时尽量保持模型的性能。以下是几种常见的量化方法的原理; 1. GPTQ (Gradient-based Post-training Quantization) GPTQ 是一种基于梯度的后训练量化方法,主要目的是在减少浮点计…...
《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
摘要 本文深入探讨了 AVL 树(自平衡二叉搜索树)的概念、特点以及实现细节。我们首先介绍了 AVL 树的基本原理,并详细分析了其四种旋转操作,包括左旋、右旋、左右双旋和右左双旋,阐述了它们在保持树平衡中的重要作用。…...
SAP 特别总账标识[SGL]
1. 特别总账标识(SGL)概述 1.1 定义与目的 特别总账标识(Special General Ledger, SGL)在SAP系统中用于区分客户或供应商的不同业务类型,以便将特定的业务交易记录到非标准的总账科目中。 定义:SGL是一个用于标记特殊业务类型的…...
认知杂谈77《简单:通往高手的技巧》
内容摘要: 在信息爆炸、关系复杂的时代,简单是复杂背后的真谛。简单如“112”,是智慧的朴素呈现。简单有强大力量,像清泉般纯净,如“我爱你”简单却有力,基础财务知识也体现其在理财中的作…...
《SmartX ELF 虚拟化核心功能集》发布,详解 80+ 功能特性和 6 例金融实践
《SmartX ELF 虚拟化核心功能集》电子书现已发布!本书详细介绍了 SmartX ELF 虚拟化及云平台核心功能,包含虚机服务、容器服务、网络服务、存储服务、运维管理、工具服务、数据保护等各个方面。 即刻下载电子书,了解如何利用基于 SmartX ELF …...
9月23日
思维导图 作业 统计家目录下.c文件的个数 #!/bin/bashnum0for file in ~/*.c; doif [ -f "$file" ]; then((num))fi doneecho "家目录下.c文件的个数: $num"...
如何使用Jinja定义dbt宏
dbt宏在dbt框架内的工作方式与传统编程中的函数类似。它允许用户将特定的、通常是重复的SQL逻辑封装到可调用的命名单元中,就像在其他编程语言中用函数来避免重复代码一样;dbt宏定义特定业务的SQL逻辑,然后在dbt项目中需要的地方调用该宏函数…...
深入理解 JavaScript 三大作用域:全局作用域、函数作用域、块级作用域
一. 作用域 对于多数编程语言,最基本的功能就是能够存储变量当中的值、并且允许我们对这个变量的值进行访问和修改。那么有了变量之后,应该把它放在哪里、程序如何找到它们?是否需要提前约定好一套存储变量、访问变量的规则?答案…...
【门牌制作 / A】
题目 代码 #include <bits/stdc.h> using namespace std; int main() {int cnt 0;for (int i 1; i < 2020; i){string s;s to_string(i);cnt count(s.begin(), s.end(), 2);}cout << cnt; }...
Git+Jenkins 基本使用(Basic Usage of Git+Jenkins)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
智谱清言:智能语音交互的引领者,解锁高效沟通新体验
哪个编程工具让你的工作效率翻倍? 在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。那么,哪款编程工具让你…...
前端组件库
vant2现在的地址 Vant 2 - Mobile UI Components built on Vue...
后端常用的mybatis-plus方法以及配合querywapper使用
目录 一、插入数据 save方法 二、删除操作 removeById方法 三、更新操作 updateById方法 四、查询操作 selectById方法 五、条件构造器QueryWrapper的更多用法 1.比较操作符 2.逻辑操作符 3.模糊查询 4.空值判断 一、插入数据 save方法 save(T entity):向数据库中插入…...
【设计模式】万字详解:深入掌握五大基础行为模式
作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【设计模式】…...
C++ 9.19
练习:要求在堆区申请5个double类型的空间,用于存储5名学生的成绩。请自行封装函数完成 1> 空间的申请 2> 学生成绩的录入 3> 学生成绩的输出 4> 学生成绩进行降序排序 5> 释放申请的空间 主程序中用于测试上述函数 #include<ios…...
[Unity Demo]从零开始制作空洞骑士Hollow Knight第五集:再制作更多的敌人
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作敌人另个爬虫Crawler 1.公式化导入制作另个爬虫Crawler素材2.制作另个爬虫Crawler的Crawler.cs状态机3.制作敌人另个爬虫Crawler的playmaker状态机二、…...
怎么把excel翻译成英文?这些翻译技巧记得收藏
在处理Excel数据时,我们常常会遇到多语言的数据集,这无疑给数据分析和整理带来了不小的挑战。 幸运的是,随着技术的发展,现在有多种工具可以帮助我们进行Excel中的批量翻译,这些工具以其强大的翻译功能和便捷的操作方…...
信息技术引领的智能化未来
信息技术引领的智能化未来 随着信息技术的飞速发展,社会各个领域正在加速迈入智能化的新时代。信息技术的广泛应用,尤其是人工智能、大数据、物联网等前沿技术的创新与融合,正在从根本上改变着人们的生产和生活方式。本文将探讨信息技术在智…...
Pixel Couplet Gen实战案例:基于Retro Game UI的微信小程序春联H5页
Pixel Couplet Gen实战案例:基于Retro Game UI的微信小程序春联H5页 1. 项目背景与设计理念 1.1 传统与数字的碰撞 春节作为中国最重要的传统节日,春联文化已有千年历史。然而在数字时代,传统春联形式面临着与年轻群体脱节的问题。Pixel C…...
SEO_如何通过内容优化有效提升SEO效果(353 )
SEO内容优化:如何通过高质量内容提升SEO效果 在当今的互联网时代,搜索引擎优化(SEO)已经成为了每一个网站运营者必须掌握的技能。而其中,内容优化是提升SEO效果的关键。好的内容不仅能吸引更多的访问者,还…...
如何用Mi-Create打造专属小米手表表盘:零基础设计师的终极指南
如何用Mi-Create打造专属小米手表表盘:零基础设计师的终极指南 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 想让你的小米手表与众不同吗&#x…...
美胸-年美-造相Z-Turbo部署避坑指南:Xinference日志解读与常见启动失败排查
美胸-年美-造相Z-Turbo部署避坑指南:Xinference日志解读与常见启动失败排查 1. 项目简介与部署价值 美胸-年美-造相Z-Turbo是基于Z-Image-Turbo LoRA版本的专业文生图模型,专注于高质量的美胸年美风格图像生成。通过Xinference框架部署,结合…...
EB Garamond 12:终极免费复古字体完整使用指南与安装教程
EB Garamond 12:终极免费复古字体完整使用指南与安装教程 【免费下载链接】EBGaramond12 项目地址: https://gitcode.com/gh_mirrors/eb/EBGaramond12 EB Garamond 12是一款基于16世纪经典Garamond字体设计的开源免费字体,完美复刻文艺复兴时期的…...
基于高通跃龙IQ-9100的边端协同智能客服系统(2): 边缘端ASR/TTS模型部署实战
📌 前文回顾:在第一篇文章中,我们介绍了边端协同架构的优势、高通跃龙IQ-9100平台的硬件特性以及系统整体架构设计。接下来,我们将进入实战环节,在IQ-9100平台上完成ASR和TTS模型的部署。1. 边缘端模型部署实战 1.1 环…...
暗黑破坏神2存档编辑器终极指南:5分钟解放你的游戏体验
暗黑破坏神2存档编辑器终极指南:5分钟解放你的游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2中反复刷装备而烦恼吗?想快速体验不同职业build却不想从头练级?d2s-e…...
解锁专利数据价值:Google Patents Public Data全流程应用指南
解锁专利数据价值:Google Patents Public Data全流程应用指南 【免费下载链接】patents-public-data Patent analysis using the Google Patents Public Datasets on BigQuery 项目地址: https://gitcode.com/gh_mirrors/pa/patents-public-data 企业如何突破…...
令牌管理:AI开发中的成本控制与效率优化——Tiktokenizer全维度应用指南
令牌管理:AI开发中的成本控制与效率优化——Tiktokenizer全维度应用指南 【免费下载链接】tiktokenizer Online playground for OpenAPI tokenizers 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokenizer 一、行业痛点分析:AI开发中的隐形成…...
Python对象生命周期管理失效了?——从引用计数到分代GC的隐性成本陷阱(附内存热力图诊断工具)
第一章:Python对象生命周期管理失效的典型现象与诊断范式Python 的自动内存管理依赖引用计数、循环垃圾收集器(GC)与弱引用机制协同工作,但当这些机制被意外绕过或干扰时,对象生命周期便可能失控。典型失效现象包括&am…...
