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.背景 在图书馆借书.刚開始的时候,直接跑到对应的楼层去,到里面去转,去找要借的书,在里面溜达半天才干找到:后来知道图书馆有一个电脑查询处.然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的 ...
随机推荐
- list(列表) python
1.list(列表): list是处理一组有序项目的数据结构 list(列表)是python中使用最频繁的数据类型 list中什么类型的数据都可以存放(如:类.自己.函数......): list(列 ...
- bzoj 1008
记得取模时对答案的处理 #include<bits/stdc++.h> #define ll long long using namespace std; ; ll qpow(ll a,l ...
- JS_高程6.面向对象的程序设计(2)创建对象_1
一.创建对象的常见方法 (1)Object构造函数创建单个对象,早期的JavaScript开发人员经常使用该模式创建新对象. var person=new Object(); person.name= ...
- IDEA 下载 和 安装
1. IDEA 下载 网址 pttps://www.jetbrains.com IDEA 优点 :高度集成企业软件工程的概念(svn, git) 缺点: 破解存在在法律风险 ; E ...
- JAVA自学笔记17
JAVA自学笔记17 1.Map接口 1)概述 将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值.可以存储键值对的元素 2)与Collection接口的不同: ①Map是双列的 ...
- centos7下使用mysql离线安装包安装mysql5.7
服务器环境: centos7 x64 需要安装mysql5.7+ 一.卸载CentOS7系统自带mariadb # 查看系统自带的Mariadb [root@CDH-141 ~]# rpm -qa|g ...
- SpringBoot(十三):springboot2.0.2定时任务
使用定义任务: 第一步:启用定时任务第二步:配置定时器资源等第三步:定义定时任务并指定触发规则 1)启动类启用定时任务 在springboot入口类上添加注解@EnableScheduling即可. ...
- svn文件夹解锁批处理
清除svn文件的bat脚本整理 从svn上检出的项目,不在myeclipse工具中脱离svn的管辖,怎么办呢,下面有我的方法,也是借鉴别人的,用了特别好使,故推荐给大家. 首先创建一个xxx.bat文 ...
- KVM之CPU虚拟化
1.1 为什么要虚拟化CPU 虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Operatin ...
- 不同浏览器Firefox、IE6、IE7、IE8、IE9定义不同CSS样式
有时候我们在制作网页的时候,会遇到不同浏览器,对填充和边距显示的不同效果.导致心情纳闷现在提供解决这个困扰的方法! 对FF.Opear等支持Web标准的浏览器与比较顽固的IE浏览器进行针对性的CSS ...