• 设计模式课程 设计模式精讲 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 {
    
    }
  • 相关阅读:
    TIOBE2017榜单公布_PHP还会是世界上最好的语言吗?
    一个优秀的程序猿应该具备哪些技能?
    7月10日云栖精选夜读:看阿里云窄带高清如何支援优酷 让《楚乔传》更清晰
    如何修复Kindle频繁自动锁屏和解锁
    CentOS 7 配置nginx的service 脚本例子
    Linux系统磁盘分区(逻辑卷LVM)的扩充
    CentOS6.7配置软raid5(模拟故障增加硬盘)
    运行软件显示:缺少packet.dll文件
    《需求工程——软件建模》06
    《需求工程——软件建模》05
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/11209253.html
Copyright © 2020-2023  润新知