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 Files\Java\jdk1.6.0_43\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=5695:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.6.0_43\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\out\production\design_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 { }

设计模式课程 设计模式精讲 3-8 迪米法特原则讲解及Coding的更多相关文章

  1. 设计模式课程 设计模式精讲 7-2 建造者模式Coding

    1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...

  2. 设计模式课程 设计模式精讲 17-2 模板方法模式coding

    1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...

  3. 设计模式课程 设计模式精讲 6-2 抽象工厂coding

    1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...

  4. 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...

  5. 设计模式课程 设计模式精讲 5-2 工厂方法coding

    1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...

  6. 设计模式课程 设计模式精讲 22-2 备忘录模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类  三个类. ...

  7. 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下

    1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...

  8. 设计模式课程 设计模式精讲 3-7 接口隔离原则讲解及Coding

    1 主讲内容 1.1 核心内容 1.2 优点 1.3 课程记录 2 代码演练 2.1 接口隔离原则反比 2.2 接口隔离原则正比 1 主讲内容 1.1 核心内容 总结:细粒度可以进行再组装,粗粒度不可 ...

  9. 设计模式课程 设计模式精讲 3-6 单一职责原则Coding

    1 要点讲解 1.1 需要注意 2 代码演练 2.1 类的单一职责原则demo 2.2 接口的单一职责原则demo 2.3 方法的单一职责原则demo 1 要点讲解 1.1 需要注意 1.1.1 实际 ...

随机推荐

  1. Multisim 如何添加文本 如何编辑文本字体

    1.在Multisim中如何添加文本 方法1)Place -> Text 方法2)Ctrl+T 2.如何修改字体的大小及颜色

  2. Flutter 中的表单

    一.Flutter 常用表单介绍   Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch  CheckboxLi ...

  3. 分析AppClassLoader,ExtClassLoader 和URLClassLoader 的关系

    测试代码: class Hello { public String str = "Hello World"; public void fun() { System.out.prin ...

  4. windows线程同步的几种方式

    以下为main函数的测试代码 具体线程同步的实现代码请下载:https://github.com/kingsunc/ThreadSynchro #include <stdio.h> #in ...

  5. inconsistent use of tabs and spaces in indentation

    这个报错就是混用了tab和4个空格造成的,检查代码,要不全部用tab,要不全部用4个空格,或者用idle编辑器校正

  6. 分布式系统:CAP 理论的前世今生

    CAP 理论是分布式系统设计中的一个重要理论,虽然它为系统设计提供了非常有用的依据,但是也带来了很多误解.本文将从 CAP 诞生的背景说起,然后对理论进行解释,最后对 CAP 在当前背景下的一些新理解 ...

  7. python pylab.plot() 方法使用

    Python 中用pylab模块, pylab.plot() 函数,绘制折线统计图 import pylab as pl x = [, , , ] y = [, , , ] ''' plot参数说明: ...

  8. scala安装此时不应有 \scala\bin\scala.bat

    scala安装目录有空格导致的,不应该有空格

  9. [JavaScript] 两个数相除有余数时结果加1

    实现代码 ; ; ?(total/item):(Math.floor(total/item)+); console.log(page)

  10. Servlet映射细节

    Servlet的映射细节: 1):一个Servlet程序(Web组件),可以配置多个<url-pattern>,表示一个Servlet有多个资源名称. <servlet-mappin ...