??? The Law of
Demeter和 Principle of Least
Knowledge讲的都是一回事,是说一个软件实体要尽可能的只与和它最近的实体进行通讯。通常被表述为:
talk only to your immediate friends
( 只和离你最近的朋友进行交互)。?
??
“talk”,其实就是对象间方法的调用。这条规则表明了对象间方法调用的原则:
(1)??????
调用对象本身的方法;
(2)??????
调用通过参数传入的对象的方法;
(3)??????
在方法中创建的对象的方法;
(4)??????
所包含对象的方法。
上面的4点看起来有点别扭,下面通过一个具体的例子,就可以对上述4条guideline有进一步感性的认识:
?1?public?class?Car?{
?2???Engine?engine;
?3???
?4???public?Car()?{
?5?????//initialize?engine,etc.
?6?}
?7?
?8?public?void?start(Key?key)?{
?9???Doors?doors?=?new?Doors();
10???boolean?authorized?=?key.turns();
11???
12???if(authorized)?{
13?????engine.start();
14?????updateDashboardDisplay();
15?????doors.lock();
16?}
17?
18?public?void?updateDashboardDisplay()?{
19???//update?display
20}
21
22?}
下面对start()方法中的语句进行分析:
第10行-key.turns():符合上述的第(2)条,key对象是通过参数传入start()方法的。
第13行-engine.start():符合上述的第(4)条,engine对象是包含在Car的对象之中的。
第14行-UpdateDashboardDisplay():符合上述的第(1)条,UpdateDashboardDisplay()方法是Car对像自身的方法。
第15行-doors.lock():符合上述的第(3)条,doors对象是在start()方法中创建的对象。
接下来看一个违反Principle of Least
Knowledge的例子:
1?public?float?getTemp()?{
2???Thermometer?thermometer?=?station.getThermometer();
3???return?thermometer.getTemperature();
4?}
上面的方法中station对象是immediate friends。但是上面的代码却从station对象中返回了一个Thermometer对象,然后调用了thermometer对象的getTemperature()方法,违反了Principle of Least
Knowledge。
下面对上面的方法作出符合Principle of Least
Knowledge的改进:
1?public?float?getTemp()?{
2???return?station.?getTemperature();
3?}
我们在Station类中添加一个方法getTemperature()。这个方法将调用Station类中含有的Thermometer对象的getTemperature()。这样getTemp()方法就只知道Station对象而不知道Thermometer对象。
总结:笛米特法则告诉我们要尽量只和离自己最近的对象进行交互。离自己最近的对象包括:自身包含的对象,方法中创建的对象,通过参数传进的对象,还有自己本身。
?
分享到:
相关推荐
设计模式总结、 -- 一,六大设计原则 一,六大设计原则 ... 迪米特法则(Law of Demeter) 也称最小知识原则,一个类应该对自己耦合或者调用的类知道的 越少越好。 开闭原则 对拓展开发,对修改关闭
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 类的设计接口尽量封装完善,让外部直接...
把十几个重要的开发原则整在一张A4纸里,可以打印出来,贴在你旁边,天天看:p 我不要自我重复 提炼原则 保持简单 不要开发你目前用不到的功能 ...笛米特法则(Law of Demeter) 避免过早优化 代码复用 职责分离 拥抱变化
OPLib是一个基于ADO2.8和COM+技术的for VB6的对象持久层(Persistence Layer)框架,它实现了数据库和中间层的Broker功能,提供OR-Mapping,将关系数据库对象映射到Class,使中间层对数据库“无知”(Law of Demeter)。...
提供了一种用于任何面向对象语言的自适应编程的完整方法。
设计模式的表述格式 ...定义:迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 还有一
1、“开-闭”原则(Open-Closed Principle,OCP) 2、里氏替换原则(Liskov Substitution Principle,LSP) 3、依赖倒置原则(Dependence Inversion Principle,DIP) ...6、迪米特法则(Law of Demeter,LoD)
Aspnet-Demeter.IdentityComponent.zip,基于mongodbdemeter.identity component的asp.net core 2.0身份组件,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5、css和...
1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 11 2.1 SINGLETON单件模式 11 2.1.1 典型的SINGLETON类 11 2.1.2 多线程安全的SINGLETON类 12 ...
国外优秀的三维地形引擎,Delta3D使用的就是这个,超棒
分布式光伏工程实训系统Demeter131A系统原理图-案例.dwg
* the Law of Demeter * Use Observer Lesson 4. Migration * Isolating Seed Data * Always add DB index Lesson 5. Controller * Use before_filter Lesson 6. View * Move code into controller ...
LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。 核心本质: 实例化对象,用工厂方法代替new操作。 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实 现类解耦。 ...
单一职责原则和最少知识原则 最少知识原则(Least Knowledge Principle, 简称为LKP)又叫迪米特法则(Law of Demeter,简写为LoD),就是说一个对象应当对其他对象有尽可能少的了解。就像我国古代老子所说的"使民...
demeter:使用Feff和Larch或Ifeffit处理和分析X射线吸收光谱数据
基于GPS和DEMETER卫星数据的地震电离层电子浓度异常变化研究.pdf
demeter demeter是一个工具,可从Calibre库下载您没有的.epub文件。 它通过基于一些聪明的算法建立一个...)安装和使用从发行页面下载适合您平台的Demeter二进制文件。这是一个独立的二进制文件,无需安装任何依赖项。
德米特土地利用和覆被分类及变化检测模型当前的版本概述Demeter是一个开源Python软件包,旨在分解由集成的人地系统模型生成的未来土地分配的预测。 传统上,来自IAM的预计土地分配以各种网格格式和空间分辨率传输到...
得墨meter耳 计算欧拉特征变换
描述 该存储库的目的是展示在构建大型应用程序中利用Microfrontends + Microservices...得墨meter尔(Demeter)是一个在线购物应用程序,出售极为稀有的物品(Differentiator的商店)。 有限的上下文 -负责管理用户记录