首页 > 其他 > 详细

5迪米特法则LoD

时间:2018-05-14 21:52:42      阅读:259      评论:0      收藏:0      [点我收藏+]

一、什么是迪米特法则

  迪米特法则(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

原文:https://www.cnblogs.com/justdoitba/p/9038302.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!