设计模式课程 设计模式精讲 3-8 迪米法特原则讲解及Coding

1    课程讲解

1.1  定义

1.2  特质

1.3  重点

2    代码演练

2.1  反例

2.2  正例

1    课程讲解

1.1  定义

定义:一个对象应该对其他对象保持最少的了解。又叫最少知道原则。

1.2  特质

核心:降低类的耦合

优点:降低类的耦合

1.3  重点

只和朋友交流,不和陌生人说话

朋友:出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

2    代码演练

 2.1  反例

测试类:

package com.geely.design.principle.demeter;

public class TestDemeter {
    public static void main(String [] args){
        //testNegated
        BossNegated bossNegated = new BossNegated();
        bossNegated.commandTecherCountCours();

        //testPositive
        //BossPositive bossPositive = new BossPositive();
        //bossPositive.commandTecherCountCours();
    }
}

测试结果:

书的总数量为:20

Process finished with exit code 0

老板类:

package com.geely.design.principle.demeter;

import java.util.ArrayList;
import java.util.List;

/**
 * 此处设计不合理,只访问朋友类(成员变量中的类,输入中出现的类,输出中出现的类)
 * 成员方法中的类不需要引入(CourseNegated)
 */
public class BossNegated {
    public void commandTecherCountCours(){
        TecherNegated teacher = new TecherNegated();
        List<CourseNegated> list = new ArrayList<CourseNegated>();
        for(int i= 0;i<20;i++){
            list.add(new CourseNegated());
        }
        teacher.countCourse(list);

    }
}

老师类:

package com.geely.design.principle.demeter;

import java.util.List;

public class TecherNegated {
    public void countCourse(List list){
        System.out.println("书的总数量为:"+list.size());
    }
}

课程类:

package com.geely.design.principle.demeter;


/**
 */
public class CourseNegated {

}

2.2  正例

测试类:

package com.geely.design.principle.demeter;

public class TestDemeter {
    public static void main(String [] args){
        //testNegated
        //BossNegated bossNegated = new BossNegated();
        //bossNegated.commandTecherCountCours();

        //testPositive
        BossPositive bossPositive = new BossPositive();
        bossPositive.commandTecherCountCours();
    }
}

测试结果:

"C:Program FilesJavajdk1.6.0_43injava.exe" "-javaagent:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar=5695:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.6.0_43jrelibcharsets.jar;C:Program FilesJavajdk1.6.0_43jrelibdeploy.jar;C:Program FilesJavajdk1.6.0_43jrelibextdnsns.jar;C:Program FilesJavajdk1.6.0_43jrelibextlocaledata.jar;C:Program FilesJavajdk1.6.0_43jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.6.0_43jrelibextsunmscapi.jar;C:Program FilesJavajdk1.6.0_43jrelibjavaws.jar;C:Program FilesJavajdk1.6.0_43jrelibjce.jar;C:Program FilesJavajdk1.6.0_43jrelibjsse.jar;C:Program FilesJavajdk1.6.0_43jrelibmanagement-agent.jar;C:Program FilesJavajdk1.6.0_43jrelibplugin.jar;C:Program FilesJavajdk1.6.0_43jrelib
esources.jar;C:Program FilesJavajdk1.6.0_43jrelib
t.jar;F:xiangmu3XinIdeaoutproductiondesign_pattern" com.geely.design.principle.demeter.TestDemeter
书的总数量为:20

Process finished with exit code 0

老板类:

package com.geely.design.principle.demeter;
/**
 *
 */
public class BossPositive {
    public void commandTecherCountCours(){
        TecherPositive teacher = new TecherPositive();
        teacher.countCourse();
    }
}

老师类:

package com.geely.design.principle.demeter;

import java.util.ArrayList;
import java.util.List;

public class TecherPositive {
    public void countCourse(){
        List<CourseNegated> list = new ArrayList<CourseNegated>();
        for(int i= 0;i<20;i++){
            list.add(new CourseNegated());
        }
        System.out.println("书的总数量为:"+list.size());
    }
}

课程类:

package com.geely.design.principle.demeter;

/**
 */
public class CourseNegated {

}
原文地址:https://www.cnblogs.com/1446358788-qq/p/11209253.html