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 { }

最新文章

  1. java Socket编程-基于TCP
  2. neutron的基本原理
  3. This function has none of DETERMINISTIC, NO SQL 解决办法
  4. MSDN:Code First 迁移
  5. iOS开发——基本常识篇&amp;各种控件默认高度
  6. 安装eclipse中文汉化包后无法打开eclipse
  7. 360浏览器拦截弹窗,window.open方式打不开新页面
  8. web app之rem
  9. HTTP协议结构
  10. Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发
  11. 用MVC+EF快速弄出一个CRUD
  12. 用ajax对数据进行查看人员信息
  13. Webstorm 快捷键大全 整理收录
  14. C#调用GDAL算法进度信息传递
  15. 【图解】Hive文件存储格式
  16. 第二阶段第七次spring会议
  17. 删除window10没用的服务
  18. C++ 提取网页内容系列之三
  19. 广播小案例-监听系统网络状态 --Android开发
  20. ios中uiview 转场动画

热门文章

  1. 从TCL欲成JDI股东看,面板行业进入“群架”时代
  2. CSH while read
  3. django ForeignKey ManyToMany 前后端联动
  4. dfs序与求子树子节点(染了色)的个数
  5. EditPlus 注册码在线生成
  6. Django--模型管理器
  7. CSS 绝对定位时,水平居中而不影响原文档中其它元素
  8. 1.1、webrtc的历史和现状
  9. 操作Document文档
  10. Python(一)list tuple dict set