`
itwoody
  • 浏览: 42667 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

The Law of Demeter和Principle of Least Knowledge

 
阅读更多
??? The Law of Demeter和 Principle of Least Knowledge讲的都是一回事,是说一个软件实体要尽可能的只与和它最近的实体进行通讯。通常被表述为:talk only to your immediate friends ( 只和离你最近的朋友进行交互)。?

?? “talk”,其实就是对象间方法的调用。这条规则表明了对象间方法调用的原则:

(1)?????? 调用对象本身的方法;

(2)?????? 调用通过参数传入的对象的方法;

(3)?????? 在方法中创建的对象的方法;

(4)?????? 所包含对象的方法。

上面的4点看起来有点别扭,下面通过一个具体的例子,就可以对上述4guideline有进一步感性的认识:

?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对象。

总结:笛米特法则告诉我们要尽量只和离自己最近的对象进行交互。离自己最近的对象包括:自身包含的对象,方法中创建的对象,通过参数传进的对象,还有自己本身。
?
分享到:
评论

相关推荐

    C++设计模式迪米特法则实例

    迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 类的设计接口尽量封装完善,让外部直接...

    wxpdesignpattern:wxpdesignpattern

    设计模式的表述格式 ...定义:迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 还有一

    java23种设计模式详细讲解

    - 迪米特法则(Law of Demeter),又称最少知道原则(Least Knowledge Principle):一个对象应当对其他对象有尽可能少的了解。 - 开闭原则(Open Close Principle):软件实体应当对扩展开放,对修改关闭。 通过...

    面向对象七大基本设计原则.pdf

    文档中还提及了OOD中的Law of Demeter(迪米特法则),又称为最少知识原则(Least Knowledge Principle)。它建议不要让一个对象知道太多关于另一个对象的信息,只和它的直接朋友通信。这样做可以降低对象之间的耦合...

    【设计模式】基于c#23种设计模式案例实现.zip

     迪米特法则(Law of Demeter,LoD)又叫最少知识原则(Least Knowledge Principle,LKP),指的是一个对象应当对其他对象有尽可能少的了解。也就是说,一个模块或对象应尽量少的与其他实体之间发生相互作用,使得...

    软件设计原则.pptx

    6. **迪米特法则 (Law of Demeter, LoD 或 Least Knowledge Principle, LKP)**:也称为最少知识原则,它提倡一个对象应该尽可能少地了解其他对象的内部细节。这有助于减少类之间的耦合,提高系统的可维护性。 这些...

    代码解耦之道_黄朝晖_PHPCON2019.pdf

    最少知识原则(Least Knowledge Principle),也称为迪米特法则(Law of Demeter):一个对象应当对其他对象有尽可能少的了解。 文档还提供了Hyperf的性能数据和开发迭代情况,说明了Hyperf框架的活跃度、社区贡献...

    软件设计6原则

    简称DIP)、里氏替换原则(Liskov Substitution Principle,简称LSP)、最少知识原则(Least Knowledge Principle)以及迪米特法则(Law of Demeter,简称LoD)。下面将对这六个原则进行详细解读: 1. 单一责任原则...

    设计模式二三事.docx

    - **迪米特法则**(Law of Demeter, LoD)也称为最少知道原则(Least Knowledge Principle),它提倡一个对象应该尽可能少地与其他对象发生相互作用,以降低系统的耦合度,提高模块间的独立性。 ### 奖励发放策略...

    head first design patterns 英文原版高清

    8. 最少知识原则(Principle of Least Knowledge):也称为迪米特法则,要求一个软件实体应当尽可能少地与其他实体发生相互作用。 9. 接口抽象原则(Interface Abstraction Principle):通过接口抽象,将细节抽象...

    php程序员编程习惯

    “限制传播”习惯提倡的是最少知道原则(Least Knowledge Principle, LKP),也被称为迪米特法则(Law of Demeter)。该原则建议一个对象应当对其他对象有最少的了解,只与它的直接朋友通信,以减少对象之间的交互,提高...

    设计模式design-pattern-java.pdf

    迪米特法则(Law of Demeter, LoD),也称为最少知道原则(Least Knowledge Principle, LKP),提倡一个对象应该尽可能少地与其他对象交互,以降低系统的耦合度。 ### 三、六个创建型模式 创建型模式关注的是对象...

Global site tag (gtag.js) - Google Analytics