软件设计原则——迪米特法则
迪米特法则
迪米特法则又叫最少知识原则
只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。
其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,
这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。
下面看一个例子来理解迪米特法则
【例】明星与经纪人的关系实例
明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。
这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,
所以适合使用迪米特法则。
类图如下:
Fans.java
package com.itheima.principles.demo5;/*** @version v1.0* @ClassName: Fans* @Description: 粉丝类* @Author: dym*/
public class Fans {private String name;public String getName() {return name;}public Fans(String name) {this.name = name;}
}
Star.java
package com.itheima.principles.demo5;/*** @version v1.0* @ClassName: Star* @Description: 明星类* @Author: dym*/
public class Star {private String name;public Star(String name) {this.name = name;}public String getName() {return name;}
}
Company.java
package com.itheima.principles.demo5;/*** @version v1.0* @ClassName: Company* @Description: 媒体公司类* @Author: dym*/
public class Company {private String name;public String getName() {return name;}public Company(String name) {this.name = name;}
}
Agent.java
package com.itheima.principles.demo5;/*** @version v1.0* @ClassName: Agent* @Description: 经纪人类* @Author: dym*/
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(star.getName() + "和粉丝" + fans.getName() + "见面");}//和媒体公司洽谈的方法public void business() {System.out.println(star.getName() + "和" + company.getName() + "洽谈");}
}
Client.java
package com.itheima.principles.demo5;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class Client {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 迪米特_Java设计原则—迪米特法则(转)
定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对 ...
- 软件设计原则 —— 迪米特原则和合成复用原则
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的 ...
- 软件设计原则-迪米特原则c++
迪米特法则又叫最少知识原则. 只和你的直接朋友交谈,不跟"陌生人"说话(Talk only to your immediate friends and not to strange ...
- C++设计原则——迪米特法则
系列文章目录 C++开闭原则 C++迪米特法则 文章目录 系列文章目录 前言 一.迪米特法则定义 二.使用场景 总结 前言 为什么我们要在软件开发中使用设计模式. 为了代码可重用性.增加可维护性,让代 ...
- 六大设计原则 ——迪米特法则
迪米特法则描述的是:一个对象应该对其他对象有最少的了解.通俗的讲 ,一个类应该对自己需要耦合或调用的类知道得最少,你的内部是如何复杂都和我没关系,那是你的事,我就知道你提供了这么多public方法,我 ...
- 设计原则 - 迪米特法则
目录 概念 编码 实例 迪米特法则实现 源码 概念 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用. 核心观念:类之间的解耦,尽量降低类与类之间 ...
- Java设计原则——迪米特法则
我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习. 学习从来无捷径,循序渐进登高峰. 目录 一.基本介绍 二.应用实例 1.示例一 2.示例二 三.迪米特法则 部分笔记来源于尚硅谷 ...
- 【设计模式】七大设计原则--------迪米特法则(得墨忒耳定律)(最少知识定律)
文章目录 1.介绍 2.示例 3.改进 1.介绍 得墨忒耳,是希腊神话的农业女神. 得墨忒耳定律主要内容为: (1)每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元: (2)每个 ...
- 面向对象软件设计原则【JAVA】(开闭原则、里氏代换、依赖倒转、接口隔离、迪米特法则、合成复用原则)
软件设计原则[JAVA](开闭原则.里氏代换.依赖倒转.接口隔离.迪米特法则.合成复用原则) 1.开闭原则 2.里氏代换原则 3.依赖倒转原则 4.接口隔离原则 5.迪米特法则 6.合成复用原则 1. ...
最新文章
- 14. 变更管理(Change Management)
- webpack创建html项目,从零开始其于webpack搭建bootstrap 4项目
- ML.NET 发布0.11版本:.NET中的机器学习,为TensorFlow和ONNX添加了新功能
- LeetCode 695. Max Area of Island javascript解决方案
- 伟大公司为什么需要技术型领导?
- 索引 | 学堂原创推文汇总-v2
- java做网页客户端_如何成为 Java web开发者
- Hive thrift服务(将Hive作为一个服务器,其他机器可以作为客户端进行访问)
- sql查询重复记录、删除重复记录方法大全
- 【从零搭建一个淘宝客公众号02】- 基于koa搭建后台
- Apache优化相关
- windows 7 下,如何统计某文件夹下 视频总时长
- Python 实现 双人五子棋对局
- 双千兆网口路由器方案开发板香橙派R1 Plus LTS连接USB无线网卡测试说明(OpenWRT 系统)
- 计算机网络实验华中科技大学,华中科技大学计算机网络实验报告.pdf
- 通过脚本将网址添加到客户的受信任站点
- android GPS 应用
- Excel数据分析从入门到精通(十四)动态图表和甘特图
- android 应用程序_Android应用程序基本概述
- 二项分布的泊松逼近matlab,学生实习报告【2】(李致宇):利用泊松分布近似二项分布-李英冰的个人主页-搜狐博客...
热门文章
- golang结构体数组
- Le Chapitre VI
- spring websocket Converters must not be empty
- LCD 常用的客观效果指标和测试方法
- MTK平台 Android4.0.3 定制关机动画
- OV5640全景模式预览倒180度,拍照正常的问题
- WINCE6.0隐藏文件夹和应用程序访问物理寄存器
- collect的功能是什么?其底层如何实现的?_用Python实现定时自动化收取蚂蚁森林能量,再也不怕被偷了
- android 7.0 调用系统相机崩溃的解决方案(非谷歌官方推荐)
- War包与配置文件分离