为什么80%的码农都做不了架构师?>>>   

<?phpclass 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、在系统中造出大量的小方法,散落在系统的各个角落。这些方法仅传递间接的调用,与系统的商务逻辑无关。

转载于:https://my.oschina.net/shyl/blog/531542

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

  1. 设计模式:六大原则之迪米特原则

    迪米特原则 基本介绍 定义:迪米特法则也称为最少知识原则,即一个对象应该对其他对象有最少的了解.通俗地说,一个类应该对自己需要耦合或调用的类知道的最少,被调用或耦合的类的内部是如何复杂都和我没有关系. ...

  2. 设计模式六大原则5---》迪米特法则

    定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就 ...

  3. 六大原则之迪米特法则

    定义: 迪米特法则又叫最少知识原则,意思是"一个对象应当对其他对象尽可能的少了解. 注意: 1.在类的划分上,应该创建弱耦合的类.类与类之间的耦合越弱,就越有利于实现可复用的目标. 2.在类 ...

  4. 设计模式的六大原则。简称:SOLID

    设计模式的六大原则.简称:SOLID 迪米特法则(Law of Demeter):如果两个类之间并不需要直接通信,那么就不应该让这两个类相互作用.又叫作最少知识原则 迪米特法则的定义是:只与你的直接朋 ...

  5. 「设计模式」六大原则之三:里氏替换原则小结

    文章目录 1.里式替换原则定义 2. 举例说明 示例1: 示例2: 3. 哪些代码明显违背了 LSP? 子类违背父类声明要实现的功能 子类违背父类对输入.输出.异常的约定 子类违背父类注释中所罗列的任 ...

  6. (转)设计模式之六大原则

    源地址:http://blog.csdn.net/scboyhj__/article/details/47844639 1. 单一职责原则 -Single Responsibility Princip ...

  7. 【设计模式 00】设计模式的六大原则

    设计模式的六大原则 参考: 设计模式六大原则 1. 单一职责原则 一个类只负责一个明确的功能 优点: 降低类的复杂度,提高代码可读性和可维护性 降低变更时对其他功能的影响 2. 里氏替换原则 **原则 ...

  8. 神了!有人用一个项目把23种设计模式与六大原则融会贯通了

    前言 设计模式分为三类,创建型,结构型和行为型.创建型比较好理解,它抽象了实例化过程,将系统与实例的创建解耦.实例由专门的工厂来创建,从而使系统针对实例的抽象接口编程,不依赖任何具体的实现.结构型和行 ...

  9. 如何理解设计模式的六大原则?

    我们知道,java中有类,父类,抽象类,接口这些概念,而设计模式的六大原则就解释了它们及其它们之间的关系是怎样的,接下来我们将由简到难一一剖析. 开闭原则:是总纲,他告诉我们要对扩展开放,对修改关闭. ...

  10. 设计模式的六大原则(SOLID)

    设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Pr ...

最新文章

  1. shell脚本实现C程序日志分流和多Terminal显示
  2. xp/2003开关3389指令
  3. Android中自定义checkbox样式
  4. python爬虫 -- 正则表达式 与 Re模块的介绍
  5. 视频 + PPT 下载 | 《财富管理数字化转型现状与趋势洞察报告》解读第一讲
  6. 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
  7. Redis数据库(一)——介绍、配置与优化
  8. python和matlab交互_MATLAB调用python,交互
  9. WPF_界面_图片/界面/文字模糊解决之道整理
  10. 极客DIY开源方案分享——智能家居你也可以做,何不DIY个自动窗帘升降控制系统?(纪念我的职业生涯处女作、曾获校赛一等奖作品、上古汇编语言编程)
  11. 5G牌照发放 ,手机产业将迎来第二春。
  12. JNCIE考试准备指南(ITAA 2014版)
  13. html打印自定义页头,CSS实现打印网页自定义页眉页脚
  14. pip下载报错:pip._vendor.urllib3.exceptions.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decry
  15. java前台界面设计_前端程序员要懂的 UI 设计知识
  16. c语言查表法编程流水灯,通过查表法的流水灯汇编程序
  17. Buhtrap在最新监控活动中使用多个0 day漏洞
  18. 计算机cmd如何设置路由,Windows 系统cmd设置添加静态路由方式
  19. *1-4 OJ 605 格雷码
  20. 03 使用three.js开发全景漫游 制作单张球形全景

热门文章

  1. CUDA5.5入门文章:VS10设置
  2. Bootstrap3基础 下载bootstrap3压缩包和相应的jQuery文件
  3. 《Linux》阿里云部署django全攻略
  4. PHP系列(九)PHP文件系统处理
  5. shell批量创建随机文件名格式文件
  6. flex 各组件对应的样式属性2
  7. 一个wxWidgets判断注册表键值的函数
  8. IE浏览器下DOM节点被替换后获取边界offsetParent / getBoundingClientRect 的BUG解决(版本 EXT 2.0/ 2.0.1)...
  9. 考研结束后去政审时穿的鞋子
  10. flink社区提问没有人回答是怎么回事?