• 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 }
  • 相关阅读:
    Splay 区间操作(二)
    P1351 联合权值
    Splay 区间操作
    P1801 黑匣子_NOI导刊2010提高(06)
    P3620 [APIO/CTSC 2007]数据备份
    T25990 [Wind Festival]Running In The Sky
    P1484 种树
    P4177 [CEOI2008]order
    题解 P2762 【太空飞行计划问题】
    dalao&话
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9038302.html
Copyright © 2020-2023  润新知