一、什么是迪米特法则

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

二、狭义的迪米特法则

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

三、和陌生人说话

5迪米特法则LoD-LMLPHP

四、不要和陌生人说话

5迪米特法则LoD-LMLPHP

五、与依赖倒转原则结合

5迪米特法则LoD-LMLPHP

六、走后门看病

5迪米特法则LoD-LMLPHP

七、办理手续住院

5迪米特法则LoD-LMLPHP

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

  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();
}
}
05-11 03:48