设计模式课程 设计模式精讲 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 实际 ...
随机推荐
- 利用Xshell5从本机上向Linux(虚拟机中)上传文件
Xmanager Enterprise 5云盘分享: http://pan.baidu.com/s/1jIkiQNW 1. 用ifconfig命令查看Linux的IP地址 2. 由于没有IP,所以我 ...
- Go时间
package main import ( "time" "fmt" "math/rand" ) func main() { /* time ...
- RHEL7安装ZABBIX 3.2
参考并结合: http://blog.sina.com.cn/s/blog_560130f20101bfou.html http://blog.itpub.net/20893244/viewspace ...
- 获取目标字符串在字符串中第N次出现的位置
/** * 获取目标字符串在字符串中第N次出现的位置 * @file name * @author xiehongwei * @date 2017-8-2 下午3:29:09 * @param sou ...
- AJAX技术初级探索
一 概念 Ajax技术能够实现页面以异步方式从服务器获取信息,无需刷新页面 Ajax的核心技术是XMLHttpRequest对象(XHR) 异步实际就是请求数据的代码不会阻塞页面向下执行 二 原生Aj ...
- C:产生随机数
函数说明 #include <time.h> time_t time(time_t *t); 功能:获取当前系统时间 参数:常设置为NULL 返回值:当前系统时间, time_t 相当于l ...
- [转] C++ CImage实现的全屏PNG截图
#include <atlimage.h> #include <atltime.h> #include <conio.h> //截取全屏保存为png CString ...
- VMware安装EVE
众所周知,EVE是一个非常强大的仿真环境,能给我们学习带来很大的帮助,这里主要简单记录一下安装在VMware下安装EVE的过程. 1.准备: 我安装的VMware是WORKSTATION 12 PRO ...
- 【C语言】输入一个年份和月份,输出该月的天数
分析: 三种类型, A.2月比较特殊,平年的2月只有28天,而闰年的2月有 29 天: B.4.6.9.11月: C.其他1.3.5.7.8.10.12月. 代码: /*输入一个年份和月份,输出该月的 ...
- c++高斯消元法求解线性方程组
#include<iostream> #include<math.h> #include<string.h> using namespace std; #defin ...