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();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

华为CNA VRM搭建(使用vmware worfstartion搭建)

创建虚拟机: 自定义→高级 选择硬件兼容性:默认安装版本,如果未来想要将此虚拟机安装到其他电脑,其他电脑版本过低,此时可以向下兼容,这里我们默认版本 稍后安装操作系统: CNA采用Euler OS系统…

WebSocket vs. Server-Sent Events:选择最适合你的实时数据流技术

引言: 在当今这个信息爆炸的时代,用户对于网页应用的实时性要求越来越高。从即时通讯到在线游戏,再到实时数据监控,WebSocket技术因其能够实现浏览器与服务器之间的全双工通信而受到开发者的青睐。 WebSocket技术为现代Web应用…

数据结构——链表(短小精悍版)

使用链表结构可以克服数组链表需要预先知道数据大小的缺点 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。 单向链表: 一个…

更换YUM源

前言 yum -y install pcre-develCannot find a valid baseurl for repo: base/7/x86_64更换yum源 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak下载yum源 这次选择阿里 阿里yum源仓库 替换更新 mv ~/Centos-7.repo /etc/yum.repos…

黑神话悟空:上架27天后,玩家群体分析

按9月13日的统计,仅在steam平台上,售出1900w份,约65亿人民币。 (游戏于2024年8月20日发售) 由于黑神话的关卡是线性的,即必须一关打过才能打下一关,和游戏的成就系统对应,所以可以…

【免费】CISSP官方习题集第4版

伴随2004年4月CISSP新大纲发布,CISSP官方习题集第4版(OPT v4)已于2024年5月出版: 本人维护的中英对照8个知识域分章节练习已同步更新完成,在保持v3版内容基础上,增补了所有v4新内容,免费供考友们使用,访问方…

漏洞复现-泛微-E-Cology-SQL

更多漏洞分析复现,可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/10358.html 0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 泛微e-cology…

通信工程学习:什么是UNI用户网络接口

UNI:用户网络接口 UNI(User Network Interface)用户网络接口,是网络通信中的一个重要概念,它连接了用户设备与智能光网络或其他类型的网络。以下是关于UNI用户网络接口的详细解释: 一、定义与功能 定义&am…

YOLO学习笔记 | YOLO目标检测算法(YOLO-V2)

github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 YOLO-V2 V1与V2区别Batch Normalization更大分辨率YOLO-V2网络结构 V1与V2区别 V2更强更快 Batch Normalization 更大分辨率 YOLO-V2网络结构

类的定义和对象的使用

类的定义 类名:手机(Phone) 成员变量:品牌(brand),价格(price) 成员方法:打电话(calL),发短信(sendMessage) 调用类变量和方法

一键智能改写文章,快速提升内容的吸引力

在这个信息如潮水般涌来的时代,优质的内容创作成为了吸引眼球、传递价值的关键。而有时候,我们可能会面临着已有文章需要优化、旧内容需要焕发新活力的情况。此时,一键智能改写文章的工具就如同一位神奇的魔法师,它能帮助我们将文…

【Linux】调试和Git及进度条实现

这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:Linux入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1.…

(CVPR-2022)感知优先的扩散模型训练

感知优先的扩散模型训练 Paper Title:Perception Prioritized Training of Diffusion Models Paper是首尔国立大学数据科学与人工智能实验室发表在CVPR 2022的工作 论文地址 Code地址 Abstract 扩散模型通过优化相应损失项的加权和(即去噪得分匹配损失&…

危机中的机遇:客户服务在品牌危机管理中的角色与价值

在瞬息万变的商业环境中,品牌危机如同暗流涌动的漩涡,随时可能将企业卷入深渊。然而,正如古语所云:“祸兮福之所倚”,危机之中往往也蕴藏着转机与机遇。在这一过程中,客户服务作为企业与消费者之间的桥梁&a…

react js 使用 useEffect 钩子

起因, 目的: useEffect() , 已经遇见好几次了。 我的理解是, 页面加载完成之后,会执行这个函数。??? 写个例子, 请求 api import React, { useState, useEffect } from "re…

【C++】STL--string(上)

前言 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留…

numpy手写二分类交叉熵

下面是一个使用NumPy手写二分类交叉熵损失的代码,包括详细注释。我们将定义一个简单的函数来计算交叉熵损失,并使用main函数来演示如何使用它。 import numpy as npdef binary_cross_entropy(y_true, y_pred):"""计算二分类交叉熵损失参…

莎朗斯通的比基尼视频曝光了她的日常锻炼!自爆曾在重症监护室呆了9天

如果您错过了,莎朗斯通 (Sharon Stone) 的华丽比基尼视频向您展示了她的日常锻炼! 9 月 12 日,斯通分享了一段她在泳池里锻炼的视频。她分享了这段视频,并配文:“我刚刚和教练 kristinemarie_18 完成了最后一次锻炼&a…

Python酷库之旅-第三方库Pandas(104)

目录 一、用法精讲 451、pandas.DataFrame.pow方法 451-1、语法 451-2、参数 451-3、功能 451-4、返回值 451-5、说明 451-6、用法 451-6-1、数据准备 451-6-2、代码示例 451-6-3、结果输出 452、pandas.DataFrame.dot方法 452-1、语法 452-2、参数 452-3、功能…

MyBatis中多对一关系的三种处理方法

目录 MyBatis中多对一关系的三种处理方法 1.通过级联属性赋值 1)mapper 2)mapper.xml 3)测试代码 4)测试结果 2.通过标签 1)mapper 2)mapper.xml 3)测试代码 4)测试结果 3.分步查询 …