5迪米特法则LoD

一、什么是迪米特法则

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

二、狭义的迪米特法则

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

三、和陌生人说话

5迪米特法则LoD

四、不要和陌生人说话

5迪米特法则LoD

五、与依赖倒转原则结合

5迪米特法则LoD

六、走后门看病

5迪米特法则LoD

七、办理手续住院

5迪米特法则LoD

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

  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();
}
}
上一篇:Python 输入输出


下一篇:TreeMap红黑树