class Teacher {

//老师对学生发布命令,清一下女生

public function commond(GroupLeader $groupLeader){

//初始化女生

for($i=0; $i<20; $i++){

$listGirls[] = new Girl();

}

//告诉体育委员开始执行清查任务

$groupLeader -> countGirls($listGirls);

}

}

class GroupLeader {

//有清查女生的工作

public function countGirls($listGirls = array()){

echo '女生的数量是:' . sizeof($listGirls);

}

}

class Girl {

}

class Client {

public static function doing() {

$teacher= new Teacher();

//老师发布命令

$teacher -> commond(new GroupLeader());

}

}

Client :: doing();

class Teacher {

public function commond(GroupLeader $groupLeader){

//告诉体育委员开始执行清查任务

$groupLeader -> countGirls();

}

}

class GroupLeader {

private $_listGirls = array();

//传递全班的女生

public function __construct($listGirls){

$this -> _listGirls = $listGirls;

}

//有清查女生的工作

public function countGirls(){

echo "女生数量是:" . sizeof($this -> _listGirls);

}

}

class Girl {

}

class Client {

public static function doing() {

//初始化女生

for($i=0; $i<20; $i++){

$listGirls[] = new Girl();

}

$teacher= new Teacher();

//老师发布命令

$teacher -> commond(new GroupLeader($listGirls));

}

}

Client :: doing();

一个对象应该对其他对象了解最少。

迪米特法则的核心就是降低类键的耦合,从而提高类的复用性。

具体体现:

① 在类的划分上,应该创建有弱耦合的类;

② 在类的结构设计上,每一个类都应当尽量降低成员的访问权限;

③ 在类的设计上,只要有可能,一个类应当设计成不变类;

④ 在对其他类的引用上,一个对象对其它对象的引用应当降到最低;

⑤ 尽量降低类的访问权限;

⑥ 谨慎使用序列化功能(类或接口在客户端变更,却未在服务端同步更新,引发序列化失败,,项目管理易疏忽);

⑦ 不要暴露类成员,而应该提供相应的访问器(属性)。

迪米特法则主要运用在观察者模式和中介者模式中

迪米特法则的缺点:

1、遵循类之间的迪米特法则会使一个系统的局部设计简化,因为每个局部都不会与远距离的对象有直接的关联;但也会造成不同模块之间的通信效率降低,会使系统的不同模块之间不容易协调。

2、在系统中造出大量的小方法,散落在系统的各个角落。这些方法仅传递间接的调用,与系统的商务逻辑无关。

python设计模式六大原则_php设计模式的六大原则(六):迪米特法则相关推荐

  1. 面试官问你如何进行程序设计?——设计模式之七大原则——接口隔离、合成复用、迪米特法则以及C++设计实现

    设计模式的设计原则之2.0 七大原则 5.接口隔离(InterfaceSegregation Principle,ISP) 5.1.背景 5.2.定义 5.3.特征 5.4.应用 6.迪米特原则(La ...

  2. python里氏替换原则_php设计模式的六大原则(三):里氏替换原则

    //例子1 class Bird{ protect function fly(){ } } //翠鸟 class KingFisher extends Bird{ } //鸵鸟 class Ostri ...

  3. 面向对象编程,设计原则,设计模式

    2019独角兽企业重金招聘Python工程师标准>>> 面向对象编程,设计原则,设计模式 面向对象编程 面向对象编程与面向过程编程的区别 面向对象软件开发的优点 面向对象编程语言 C ...

  4. 【设计模式之美 设计原则与思想:设计原则】22 | 理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?

    今天,我们讲最后一个设计原则:迪米特法则.尽管它不像 SOLID.KISS.DRY 原则那样,人尽皆知,但它却非常实用.利用这个原则,能够帮我们实现代码的"高内聚.松耦合".今天, ...

  5. 某一个接口403 其他接口可以调通_设计模式HR:不会设计模式,你来面什么试?你以为设计模式只有23种?(真正的入门到精通可以用到入土)...

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过 ...

  6. 软件设计模式--第一章 软件设计模式基础

    目录 第一章 软件设计模式基础 1.软件设计模式概述 (1)什么是软件设计模式 (2)学习设计模式的意义 (3)软件设计模式的基本要素 (4)GoF的23种设计模式简介 2.UML中的类图 (1)统一 ...

  7. 2016-12-28 迪米特法则+依赖倒转原则+里氏替换原则

    依赖倒转原则 依赖倒转原则,也翻译成依赖倒置原则,抽象不应该依赖细节,细节应该依赖于抽象,要针对接口编程,而不是对实现编程.如电脑中无论主板.CPU.内存.硬盘都是针对接口设计的,PC电脑硬件的发展, ...

  8. python三大特征六大原则_设计模式-来玩魔王的咚!-51CTO博客

    每一个设计模式系统的命名.解释和评价了面向对象系统中一个重要的和重复出现的设计.这里面向对象划重点,意思是所有的设计模式都是针对面向对象的提出的. 设计模式的4个基本要素: 模式名称 问题 解决方案 ...

  9. python设计模式六大原则_学习设计模式 - 六大基本原则之迪米特法则(示例代码)...

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

最新文章

  1. 软件工程需求设计说明书
  2. 2021年春季学期-信号与系统-第三次作业参考答案-第十道题
  3. 对javascript作用域链的理解
  4. 转载:身体器官工作表一览,睡觉别太晚了
  5. StringBuider 在什么条件下使用效率更高?
  6. click F5 refresh button on detail page - how to get the usable OData model
  7. [bash] printf使用范例
  8. Unity 利用NGUI做屏幕分辨率适配+学习UIDraggablePanel的使用
  9. c语言酒店管理系统,C语言酒店管理系统.pdf
  10. mysql关键字 distinct去重
  11. ST、SC、FC、LC光纤接头区别
  12. 微博html5版登录网址,微博网页版登录入口
  13. 搜索不到投屏设备怎么办_投屏,搜索不到电视设备解决方案
  14. 项目开发中dev、test和prod是什么意思
  15. 一套键鼠控制多台不同平台电脑——synergy使用详解
  16. C++C++ 编写GoFGoF设计模式里Lexi样例
  17. fanyibishe
  18. 通信原理Matlab仿真:模拟信号的幅度调制
  19. 船务术语简缩语(zt)
  20. 微信支付结算费率怎么降低至0.2~0.35操作方法

热门文章

  1. Go基础之--数组和切片
  2. String与NSString关系
  3. PowerDesigner逆向生成
  4. Android ListView存在多个item样式的处理方法
  5. instanceof 内部机制
  6. hive on tez踩坑记2-hive0.14 on tez
  7. ZooKeeper安装和配置
  8. iOS:给标签栏控制器的UITabbarItem添加点击动效
  9. [HTML]增加input标签的multiple属性上传的文件数
  10. Java8 Time