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. Redis的安装与用法

    Redis的使用方法 ( 命令行安装redis 1  wget http://download.redis.id/releases/redis-5.0.7.tar.gz 2 tar xf redis- ...

  2. PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式

    $test=$_POST["test"]; $test= preg_replace("/(\n)|(\s)|(\t)|(\')|(')|(,)/" ,',' , ...

  3. star_namelist

    Yua Mikami Shion Utsunomiya Mizuho Uehara Yui Hatano 波多野结衣 Tsubasa Amami Rei Mizuna 水菜丽 Eimi Fukada ...

  4. 使用ltp4j碰到Can't find dependent libraries报错信息的问题解决

    项目中使用了哈工大的自然语言处理模块ltp4j,使用idea工具集成到项目中之后,在本机运行没有问题,一切正常.打成war包,部署到服务器上,使用的时候报错Can't find dependent l ...

  5. 如何使用git和github

    转载:https://www.cnblogs.com/cxscode/p/8325064.html 如何用git将项目代码上传到github 先上常用语句 git add . git commit - ...

  6. Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException

    实体类缺少无参构造方法,序列化对象需要无参构造方法 @NoArgsConstructor

  7. 笔记本电脑插上耳机声音依然外放解决方法 为什么插入HDMI线,电脑的音响就没有声音了

    笔记本电脑插上耳机声音依然外放解决方法: 下载一个驱动大师,安装声卡驱动.(驱动人生安装的驱动有可能不能用) 为什么插入HDMI线,电脑的音响就没有声音了 参考:https://zhidao.baid ...

  8. JAVA(2)之关于类的访问权限控制

    类的成员的四种访问权限 private 只能在当前类中访问 无修饰 同一个包中的类都可以访问 protected 同一个包中的类可以访问 不同包中的子类可以访问 public 所有类都可以访问 示例代 ...

  9. NOIP-- 模拟-----机器

    机器翻译 题目描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  10. 高次arccos积分

    \[\Large\displaystyle \int_0^{1} \frac{\arccos^4 \left(x^2\right)}{\sqrt{1-x^2}}\,\mathrm{d}x\] \(\L ...