5迪米特法则LoD

Posted 未来_我来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5迪米特法则LoD相关的知识,希望对你有一定的参考价值。

一、什么是迪米特法则

  迪米特法则(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的主要内容,如果未能解决你的问题,请参考以下文章

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

设计模式 - 六大设计原则之LoD(迪米特法则原则)

设计模式 - 六大设计原则之LoD(迪米特法则原则)

迪米特法则(Law of Demeter)LoD

迪米特法则

面向对象设计原则 迪米特法则(Law of Demeter)