5迪米特法则LoD
一、什么是迪米特法则
迪米特法则(Law of Demeter )又叫做最少知识 原则,也就是说,一个对象应当对其他对象尽可 能少的了解。 迪米特法则最初是用来作为面向对象的系统设 计风格的一种法则,于1987年秋天由lan holland 在美国东北大学为一个叫做迪米特的项目设计提 出的。
二、狭义的迪米特法则
如果两个类不必彼此直接通信,那么这两个类 就不应当发生直接的相互作用。如果其中一个类 需要调用另一类的某一个方法的话,可以通过第 三者转发这个调用。
三、和陌生人说话
四、不要和陌生人说话
五、与依赖倒转原则结合
六、走后门看病
七、办理手续住院
八、迪米特法则和设计模式
1.外观模式
2.中介者模式
ex1:
陌生人
//陌生人
public class Stranger {
public void play(){
System.out.println("stranger play");
}
}
朋友
//朋友
public class Friend {
public void play(){
System.out.println("friends paly");
}
}
某人
//某人
public class SomeOne {
public void play(Friend friend){
System.out.println("someone play");
friend.play();
} public void play(Stranger stranger) {
System.out.println("someone play");
stranger.play();
}
}
测试
public class MainClass {
public static void main(String[] args) {
SomeOne zhangsan = new SomeOne();
zhangsan.play(new Friend());
zhangsan.play(new Stranger());
}
}
===============================================================
ex2:
//陌生人
public class Stranger {
public void play(){
System.out.println("stranger play");
}
}
//朋友
public class Friend {
public void play(){
System.out.println("friends paly");
} public Stranger getStranger() {
return new Stranger();
}
}
//某个人
public class SomeOne {
public void play(Friend friend){
System.out.println("someone play");
friend.play();
Stranger stranger = friend.getStranger();
stranger.play();
}
}
public class MainClass {
public static void main(String[] args) {
SomeOne zhangsan = new SomeOne();
zhangsan.play(new Friend());
}
}
===============================================================
ex3:
//陌生人
public class Stranger {
public void play(){
System.out.println("stranger play");
}
}
//朋友
public class Friend {
public void play(){
System.out.println("friends paly");
} public void playWithStranger() {
Stranger stranger = new Stranger();
stranger.play();
}
}
//某个人
public class SomeOne {
private Friend friend; public Friend getFriend() {
return friend;
} public void setFriend(Friend friend) {
this.friend = friend;
} public void play(Friend friend){
System.out.println("someone play");
friend.play();
}
}
=======================================================================
ex4:
public abstract class Stranger {
public abstract void play();
}
public class StrangerA extends Stranger { public void play() {
System.out.println("strangerA play");
}
}
public class Friend {
public void play(){
System.out.println("friends paly");
}
}
public class SomeOne {
private Friend friend;
private Stranger stranger; public Stranger getStranger() {
return stranger;
} public void setStranger(Stranger stranger) {
this.stranger = stranger;
} public Friend getFriend() {
return friend;
} public void setFriend(Friend friend) {
this.friend = friend;
} public void play() {
System.out.println("someone play");
friend.play();
stranger.play();
}
}
public class MainClass {
public static void main(String[] args) {
SomeOne zhangsan = new SomeOne();
zhangsan.setFriend(new Friend());
zhangsan.setStranger(new StrangerA());
zhangsan.play();
}
}
5迪米特法则LoD的更多相关文章
- 11. 无数人难办事? - 迪米特法则(LoD)
11.1 第一天上班 时间: 4月2日19点 地点: 小菜大鸟住所的客厅 任务: 小菜, 大鸟 "回来啦! 怎么样? 第一天上班感受多吧." 大鸟关关心的问道. ...
- 设计模式--迪米特法则(Lod/LKP)
迪米特法则:(Law of Demeter, LoD),也称最少知识原则(Least Knowledge Principle, LKP) 理解: 假设两个类不必彼此直接通信,那么这两个类就不 ...
- IOS设计模式的六大设计原则之迪米特法则(LOD,Law Of Demeter)
定义 狭义的迪米特法则定义:也叫最少知识原则(LKP,Least Knowledge Principle).如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中的一个类需要调用 ...
- 迪米特法则(LoD)
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用.其根本思想是类之间的松耦合. 类之间的耦合越弱,越有利于 ...
- [Python设计模式] 第11章 迪米特法则——最少知识原则
github地址:https://github.com/cheesezh/python_design_patterns 迪米特法则 迪米特法则(LoD),也叫最少知识原则,如果两个类不必彼此直接通信, ...
- 设计模式之六大原则——迪米特法则(LoD,LKP)
转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793000.html 定义: 迪米特法则(Law of Demeter,LoD)也 ...
- 设计模式值六大原则——迪米特法则(LoD)也称为最少知识原则(LKP)。
定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对 ...
- 《设计模式》-原则六:迪米特法则(LoD)
啊哈哈哈哈,又到星期五了,真开心.回来吃完饭慌着去玩游戏,所以立马过来先完成今天的学习目标. 这个原则的命名好像是以某个人的名字命名的,算了我不去管这个了. 直接说说我学到的东西,这个迪米特法则又可以 ...
- 设计模式六大原则——迪米特法则(LoD)
1.背景 在图书馆借书.刚開始的时候,直接跑到对应的楼层去,到里面去转,去找要借的书,在里面溜达半天才干找到:后来知道图书馆有一个电脑查询处.然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的 ...
随机推荐
- 学习Struts--Chap07:Struts2文件上传和下载
1.struts2文件上传 1.1.struts2文件上传的基本概述 在开发web应用的时候,我们一般会为用户提供文件上传的功能,比如用户上传一张图像作为头像等.为了能上传文件,我们必须将表单的met ...
- Linux之ssh登录
作业三:ssh登录,scp上传.下载,ssh秘钥登录,修改ssh server端的端口为8888然后进行登录和scp测试 1.ssh登录 [root@localhost network-scripts ...
- web (Servlet)
1.如果你文档新建的出现很多红色的小擦擦出错 这样做
- es6新增的数组遍历方式
1.some方法 1)some() 方法测试是否至少有一个元素通过由提供的函数实现的测试. 2)参数列表: arr.some(callback(element[, index[, array]])[, ...
- 阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)
说明: 1.必须要有一台机器具有外网IP的ECS. 2.如果不想配置具有外网IP的ECS时,可以购买NAT网关,但需要钱,贵.下面会说明NAT网关的配置. 3.最后吐槽一下阿里云VPC网关导致不能按照 ...
- 如何使用HttpClient包实现JAVA发起HTTP请求?
今天在搭建公司项目框架的时候,发现缺少了一个Java发送HTTP请求的工具类,在网上找了一通,经过自己的改造,已经能实现get请求和post请求的了,现在将代码贴在这里.给大家参考. 1 packag ...
- UITextField 基本设置
_myAccount = [[UITextField alloc]init]; _myAccount.frame = CGRectMake(, , , ); _myAccount.background ...
- 【转载】linux系统时间自动同步:ntp
NTP基本介绍 NTP(Network TimeProtocol,网络时间协议),使用来使本地机器与服务端机器时间保持同步的一种协议.如果我们只有一台机器那么只需要安装NTP客户端ntpdate这个包 ...
- Roslyn如何实现简单的代码提示
假如需要实现一个代码编辑器,其中一个很重要的功能是实现代码提示,类似VS的代码智能提示.下面用Roslyn编译器来实现一个简单的代码提示功能. 代码提示,首先必须需要知道对象的类型信息,然后通过迭代获 ...
- vue 的rem 配置和flexible.js的应用
1.环境的配置: C:\Windows\System32\drivers\etc 2.多行注释: 光标放在函数中间,连按两次:“Ctrl+Alt+D”,就会出现以下的内容 3.总结使用过程:vue移动 ...