当前位置: 首页 > 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();}
}
http://www.lryc.cn/news/444459.html

相关文章:

  • docker多阶段镜像制作,比如nginx镜像,编译+制作
  • 大语言模型量化方法GPTQ、GGUF、AWQ详细原理
  • 《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
  • SAP 特别总账标识[SGL]
  • 认知杂谈77《简单:通往高手的技巧》
  • 《SmartX ELF 虚拟化核心功能集》发布,详解 80+ 功能特性和 6 例金融实践
  • 9月23日
  • 如何使用Jinja定义dbt宏
  • 深入理解 JavaScript 三大作用域:全局作用域、函数作用域、块级作用域
  • 【门牌制作 / A】
  • Git+Jenkins 基本使用(Basic Usage of Git+Jenkins)
  • 智谱清言:智能语音交互的引领者,解锁高效沟通新体验
  • 前端组件库
  • 后端常用的mybatis-plus方法以及配合querywapper使用
  • 【设计模式】万字详解:深入掌握五大基础行为模式
  • C++ 9.19
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第五集:再制作更多的敌人
  • 怎么把excel翻译成英文?这些翻译技巧记得收藏
  • 信息技术引领的智能化未来
  • 【QT开发-Pyside】使用Pycharm与conda配置Pyside环境并新建工程
  • vue选项式写法项目案例(购物车)
  • [Linux][进程] 认识进程
  • 如何安装和注册 GitLab Runner
  • 专业学习|动态规划(概念、模型特征、解题步骤及例题)
  • 数据结构与算法 #时间复杂度 #空间复杂度
  • 【多机器人轨迹规划最优解问题】
  • 机器学习及其应用领域【金融领域】
  • 【实战教程】PHP与七牛云的完美对接,你值得拥有!
  • 2024网易低代码大赛 | 想参赛但不知道搭什么?灵感就这么水灵灵地来了!
  • (附源码)基于django的电力工程作业现场物资管理系统的设计与实现-计算机毕设 22067