当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 生信初学者教程(五):R语言基础
  • PCL 读取txt格式点云并可视化
  • Cron表达式学习
  • 机器狗与无人机空地协调技术分析
  • 自注意力与多头自注意力的区别
  • 基于yolov5的不同颜色安全帽检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • Virtuoso服务在centos中自动停止的原因分析及解决方案
  • js中的 赋值 浅拷贝 和 深拷贝 详细解读
  • Knowledge Graph Large Language Model (KG-LLM) for Link Prediction
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 智慧交通,智能消防系统助力高铁站安全
  • [Linux]自定义shell详解
  • SpringBoot 基于 Vue 的地方美食分享网站
  • 秦时明月6.2魔改版+GM工具+虚拟机一键端
  • 图片压缩格式自适应,真的很省流量!
  • 2017 年终总结 —— 在路上
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ECMAScript入门(七)--Module语法
  • HTTP请求重发
  • Java到底能干嘛?
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • js正则,这点儿就够用了
  • laravel5.5 视图共享数据
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Python中eval与exec的使用及区别
  • React-Native - 收藏集 - 掘金
  • Swoft 源码剖析 - 代码自动更新机制
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 聊一聊前端的监控
  • 前端之React实战:创建跨平台的项目架构
  • 使用SAX解析XML
  • 通信类
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 中文输入法与React文本输入框的问题与解决方案
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (4) PIVOT 和 UPIVOT 的使用
  • (Git) gitignore基础使用
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (web自动化测试+python)1
  • (第一天)包装对象、作用域、创建对象
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (回溯) LeetCode 131. 分割回文串
  • (每日一问)基础知识:堆与栈的区别
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (新)网络工程师考点串讲与真题详解
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .Family_物联网
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 获取url的方法
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET大文件上传知识整理