设计模式课程 设计模式精讲 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 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的更多相关文章
- 设计模式课程 设计模式精讲 7-2 建造者模式Coding
1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...
- 设计模式课程 设计模式精讲 17-2 模板方法模式coding
1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...
- 设计模式课程 设计模式精讲 6-2 抽象工厂coding
1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...
- 设计模式课程 设计模式精讲 18-2 迭代器模式coding
1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...
- 设计模式课程 设计模式精讲 5-2 工厂方法coding
1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...
- 设计模式课程 设计模式精讲 22-2 备忘录模式coding
1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类 三个类. ...
- 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下
1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...
- 设计模式课程 设计模式精讲 3-7 接口隔离原则讲解及Coding
1 主讲内容 1.1 核心内容 1.2 优点 1.3 课程记录 2 代码演练 2.1 接口隔离原则反比 2.2 接口隔离原则正比 1 主讲内容 1.1 核心内容 总结:细粒度可以进行再组装,粗粒度不可 ...
- 设计模式课程 设计模式精讲 3-6 单一职责原则Coding
1 要点讲解 1.1 需要注意 2 代码演练 2.1 类的单一职责原则demo 2.2 接口的单一职责原则demo 2.3 方法的单一职责原则demo 1 要点讲解 1.1 需要注意 1.1.1 实际 ...
随机推荐
- 安装VMware Tools和设置屏幕
在虚拟机窗口的虚拟机-安装VMware Tools,点击安装,直到安装完成,出现以下界面 在主文件夹中新建VM文件夹,将VMware Tools中的VMwareTools-10.0.10-430167 ...
- navicat导入.csv表格
我本地的navicat不知道啥情况,导入不了表格,然后把表格转为.csv的,然后导入就好了 1.表格另存为.csv格式的 2.打开Navicat,选择要导入的表,然后右键->导入向导,选择.cs ...
- DFS(深度优先搜索)
基本概念 深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过或者在搜 ...
- 「JSOI2015」串分割
「JSOI2015」串分割 传送门 首先我们会有一个贪心的想法:分得越均匀越好,因为长的绝对比短的大. 那么对于最均匀的情况,也就是 \(k | n\) 的情况,我们肯定是通过枚举第一次分割的位置,然 ...
- SQL Server不同服务器不同数据库间的操作
什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库上进行相关的数据库操作,比如增删改查. 为什么要进行跨服务器操作 随着数据量的增多,业务量的扩张,需要在不 ...
- vue使用过程中遇到的细节问题
1. 在methods 中添加一个方法.如果这个方法使用箭头函数的话,箭头函数中的this不是当前的vue实例,所以通过this.xxx是获取不到实例上面的属性的,这时我们可以用函数的简写来获取到实例 ...
- Linux编程日常错误
编译的时候出现如下错误提示: undefined reference to `sem_init'undefined reference to `sem_post'undefined reference ...
- 8,xhtml和html有什么区别
8,xhtml和html有什么区别 功能上有差别:xhtml可以兼容各大浏览器,手机,以及pda,浏览器也能快速准确地翻译网页 书写嘻惯的差别:xhtml必须正确的嵌套,闭合,区分大小写,文档必须有根 ...
- zabbix4.4安装和简要设置
简介 Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决 ...
- Shiro入门学习之自定义Realm实现授权(五)
一.自定义Realm授权 前提:认证通过,查看Realm接口的继承关系结构图如下,要想通过自定义的Realm实现授权,只需继承AuthorizingRealm并重写方法即可 二.实现过程 1.新建mo ...