一、什么是迪米特法则

  迪米特法则(Law of Demeter )又叫做最少知识 原则,也就是说,一个对象应当对其他对象尽可 能少的了解。 迪米特法则最初是用来作为面向对象的系统设 计风格的一种法则,于1987年秋天由lan holland 在美国东北大学为一个叫做迪米特的项目设计提 出的。

二、狭义的迪米特法则

  如果两个类不必彼此直接通信,那么这两个类 就不应当发生直接的相互作用。如果其中一个类 需要调用另一类的某一个方法的话,可以通过第 三者转发这个调用。

三、和陌生人说话

四、不要和陌生人说话

五、与依赖倒转原则结合

六、走后门看病

七、办理手续住院

八、迪米特法则和设计模式

  1.外观模式

  2.中介者模式

ex1:

陌生人

  1. //陌生人
  2. public class Stranger {
  3. public void play(){
  4. System.out.println("stranger play");
  5. }
  6. }

朋友

  1. //朋友
  2. public class Friend {
  3. public void play(){
  4. System.out.println("friends paly");
  5. }
  6. }

某人

  1. //某人
  2. public class SomeOne {
  3. public void play(Friend friend){
  4. System.out.println("someone play");
  5. friend.play();
  6. }
  7.  
  8. public void play(Stranger stranger) {
  9. System.out.println("someone play");
  10. stranger.play();
  11. }
  12. }

测试

  1. public class MainClass {
  2. public static void main(String[] args) {
  3. SomeOne zhangsan = new SomeOne();
  4. zhangsan.play(new Friend());
  5. zhangsan.play(new Stranger());
  6. }
  7. }

===============================================================

ex2:

  1. //陌生人
  2. public class Stranger {
  3. public void play(){
  4. System.out.println("stranger play");
  5. }
  6. }
  1. //朋友
  2. public class Friend {
  3. public void play(){
  4. System.out.println("friends paly");
  5. }
  6.  
  7. public Stranger getStranger() {
  8. return new Stranger();
  9. }
  10. }
  1. //某个人
  2. public class SomeOne {
  3. public void play(Friend friend){
  4. System.out.println("someone play");
  5. friend.play();
  6. Stranger stranger = friend.getStranger();
  7. stranger.play();
  8. }
  9. }
  1. public class MainClass {
  2. public static void main(String[] args) {
  3. SomeOne zhangsan = new SomeOne();
  4. zhangsan.play(new Friend());
  5. }
  6. }

===============================================================

ex3:

  1. //陌生人
  2. public class Stranger {
  3. public void play(){
  4. System.out.println("stranger play");
  5. }
  6. }
  1. //朋友
  2. public class Friend {
  3. public void play(){
  4. System.out.println("friends paly");
  5. }
  6.  
  7. public void playWithStranger() {
  8. Stranger stranger = new Stranger();
  9. stranger.play();
  10. }
  11. }
  1. //某个人
  2. public class SomeOne {
  3. private Friend friend;
  4.  
  5. public Friend getFriend() {
  6. return friend;
  7. }
  8.  
  9. public void setFriend(Friend friend) {
  10. this.friend = friend;
  11. }
  12.  
  13. public void play(Friend friend){
  14. System.out.println("someone play");
  15. friend.play();
  16. }
  17. }

=======================================================================

ex4:

  1. public abstract class Stranger {
  2. public abstract void play();
  3. }
  1. public class StrangerA extends Stranger {
  2.  
  3. public void play() {
  4. System.out.println("strangerA play");
  5. }
  6. }
  1. public class Friend {
  2. public void play(){
  3. System.out.println("friends paly");
  4. }
  5. }
  1. public class SomeOne {
  2. private Friend friend;
  3. private Stranger stranger;
  4.  
  5. public Stranger getStranger() {
  6. return stranger;
  7. }
  8.  
  9. public void setStranger(Stranger stranger) {
  10. this.stranger = stranger;
  11. }
  12.  
  13. public Friend getFriend() {
  14. return friend;
  15. }
  16.  
  17. public void setFriend(Friend friend) {
  18. this.friend = friend;
  19. }
  20.  
  21. public void play() {
  22. System.out.println("someone play");
  23. friend.play();
  24. stranger.play();
  25. }
  26. }
  1. public class MainClass {
  2. public static void main(String[] args) {
  3. SomeOne zhangsan = new SomeOne();
  4. zhangsan.setFriend(new Friend());
  5. zhangsan.setStranger(new StrangerA());
  6. zhangsan.play();
  7. }
  8. }

5迪米特法则LoD的更多相关文章

  1. 11. 无数人难办事? - 迪米特法则(LoD)

    11.1 第一天上班 时间: 4月2日19点   地点: 小菜大鸟住所的客厅   任务: 小菜, 大鸟      "回来啦! 怎么样? 第一天上班感受多吧." 大鸟关关心的问道.  ...

  2. 设计模式--迪米特法则(Lod/LKP)

    迪米特法则:(Law of Demeter, LoD),也称最少知识原则(Least Knowledge Principle, LKP) 理解:      假设两个类不必彼此直接通信,那么这两个类就不 ...

  3. IOS设计模式的六大设计原则之迪米特法则(LOD,Law Of Demeter)

    定义 狭义的迪米特法则定义:也叫最少知识原则(LKP,Least Knowledge Principle).如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中的一个类需要调用 ...

  4. 迪米特法则(LoD)

    如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用.其根本思想是类之间的松耦合. 类之间的耦合越弱,越有利于 ...

  5. [Python设计模式] 第11章 迪米特法则——最少知识原则

    github地址:https://github.com/cheesezh/python_design_patterns 迪米特法则 迪米特法则(LoD),也叫最少知识原则,如果两个类不必彼此直接通信, ...

  6. 设计模式之六大原则——迪米特法则(LoD,LKP)

    转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793000.html  定义: 迪米特法则(Law of Demeter,LoD)也 ...

  7. 设计模式值六大原则——迪米特法则(LoD)也称为最少知识原则(LKP)。

    定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对 ...

  8. 《设计模式》-原则六:迪米特法则(LoD)

    啊哈哈哈哈,又到星期五了,真开心.回来吃完饭慌着去玩游戏,所以立马过来先完成今天的学习目标. 这个原则的命名好像是以某个人的名字命名的,算了我不去管这个了. 直接说说我学到的东西,这个迪米特法则又可以 ...

  9. 设计模式六大原则——迪米特法则(LoD)

    1.背景 在图书馆借书.刚開始的时候,直接跑到对应的楼层去,到里面去转,去找要借的书,在里面溜达半天才干找到:后来知道图书馆有一个电脑查询处.然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的 ...

随机推荐

  1. js计算总页数

    前端js取余是a%b 取除数parseInt(a / b) /** * 总页数@param(总条数,每页总条数) */ function pageTotal(rowCount, pageSize) { ...

  2. Html图像标签、绝对路径和相对路径:

    Html图像标签: <img>标签可以在网页上插入一张图片,它是独立使用的标签,它的常用属性有: (1)src 属性 定义图片的引用地址 (2)alt 属性 定义图片加载失败时显示的文字, ...

  3. poj3616 Milking Time(状态转移方程,类似LIS)

    https://vjudge.net/problem/POJ-3616 猛刷简单dp的第一天第二题. 这道题乍一看跟背包很像,不同的在于它是一个区间,背包是定点,试了很久想往背包上套,都没成功. 这题 ...

  4. CentOS下双网卡双IP不同IP段配置

    环境: eth0:10.0.7.2  gw :10.0.7.254 netmask:255.255.255.0 eth1:168.6.101.2    gw :168.6.101.254    net ...

  5. Golang LicenseServer授权服务器的设计 与 RSA 密钥对的应用

    //TODO 待写文章 目录: 1.为什么要写授权服务器  LicenseServer 2.授权服务器的设计思路 3.授权服务器所使用到的加密技术 1.为什么要写授权服务器 为了防止别人拿到二进制后, ...

  6. SQLite在.NET中自适应32位/64位系统

    如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...

  7. java-Freemarker TemplateLoader实现模版

    TemplateLoader的实现 作为一个模板文件加载的抽象,自然不能限制模板来自何方,在FreeMarker中由几个主要的实现类来体现,这些TemplateLoader是可以独立使用的,Webap ...

  8. 【网络安全】SSLSplit实现中间人攻击

    中间人攻击,即在中间监听获取网络数据以便获取的有价值的信息实现攻击破坏的目的,即client-mid man-server,此处介绍的sslsplit可以作为mid man监听ssl信息及HTTP信息 ...

  9. ld: framework not found FileProvider for architecture arm64

    出现这个问题是因为  静态库是用Xcode9打包的. 如果用xcode8编译的话就会出现这个问题 解决办法 从Xcode9里把这个库拷贝出来.然后放到Xcode8上面 One way to fix t ...

  10. lsof 查看文件被哪个进程占用

    lsof 是什么意思? 答: list open files 查看某个文件被哪些进程在读写 lsof 文件名 查看某个进程打开了哪些文件lsof –c 进程名lsof –p 进程号 lsof用法小全 ...