码迷,mamicode.com
首页 > 其他好文 > 详细

5迪米特法则LoD

时间:2018-05-14 22:05:18      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:后门   风格   办理   pre   dem   new   原则   public   nbsp   

一、什么是迪米特法则

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

标签:后门   风格   办理   pre   dem   new   原则   public   nbsp   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!