0 0

迪米特法则中看不懂的"朋友"5

“朋友”的定义:
1、当前对象本身(this)。
2、以参数形式传入到当前对象方法中的对象。
主要是看不懂为什么下面这些也是朋友:
3、当前对象的实例变量直接引用的对象。
4、当前对象的实例变量如果是个聚集那么聚集中的元素也是“朋友”。
5、当前对象创建的对象。

先举个反例:
class Person{
   public void say(Friend friend){
        Stranger stranger=friend.getStranger();
        stranger.say();
   }
}

这是个典型的反例。解决办法是由Friend代理'stranger.say()',这样Person就只依赖Friend。
class Person{
   public void say(Friend friend){
        friend.say();
   }
}
class Friend{
  private Stranger stranger;
  Friend(Stranger stranger){
    this.stranger=stranger;
  }
  public void say(){stranger.say();}
}

但以下的例子我就看不懂了:
class Person{
   public void say(){
        Stranger stranger=new Stranger();
        stranger.say();
   }
}

这个我原先以为也是反例,但实际上却是遵守法则的。同样是依赖了Stranger,后者仅仅是因为符合“朋友”的定义,所以它就遵守了法则。但我以为,前者因依赖Stranger而带来的弊端后者也不能幸免;回过头想想,即使是“朋友”Friend也无法避免。如此看来,迪米特法则应该理解为:“不要窥探朋友的隐私”才对,依赖一次就够了,不要继续深入;我也实在是想不到第二个反例了。
OO 
2011年6月02日 19:01
目前还没有答案

相关推荐

    第三十讲:基础五迪米特法则

    迪米特法则得名于希腊神话中的先知迪米特,其核心思想是“只与你的直接朋友交谈”。这一原则旨在降低类之间的耦合性,提高软件的可维护性和可扩展性。 迪米特法则的具体内容包括以下几个方面: 1. **每个对象应该...

    迪米特法则LoD.zip

    迪米特法则(Law of Demeter,简称LoD)是面向对象设计中的一种重要原则,源自1987年在 Northeastern University 提出。这个法则旨在降低类与类之间的耦合,提高系统的可维护性和可扩展性。在中文环境中,迪米特法则...

    简单代码解释迪米特法则

    这体现了迪米特法则,因为`Form1`不是`Form2`的直接朋友,它通过公开的事件来传递信息,而不是直接访问`Form2`的内部状态。 `MessageEventArgs.cs`可能是自定义的事件参数类,用于在事件中传递数据。这种方式允许`...

    设计模式6大原则:迪米特法则

    设计模式6大原则:迪米特法则

    迪米特法则---门面Facade模式.docx

    迪米特法则主张一个对象应该尽量减少与其他对象的交互,只与直接的朋友交流,以此提高系统的内聚性和可维护性。 门面模式的核心思想是为一个复杂的子系统提供一个简洁的接口。客户角色通过门面角色来与子系统进行...

    迪米特法则

    根据迪米特法则,一个对象应该尽量减少对其他对象的了解,即一个类应当只与它的直接朋友交互,而不是与远方的陌生人直接通信。 在描述的示例中,我们有一个由Someone、Friend和Stranger三个类组成的系统。Someone和...

    迪米特法则_动力节点Java学院整理

    迪米特法则,亦称最少知道原则,是在Java编程领域中一个非常重要的设计原则。这个原则指导我们在设计类和方法的时候,需要尽量减少类与类之间的交互和依赖,以达到降低耦合的目的。迪米特法则不仅有助于提高代码的...

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

    C++设计模式迪米特法则实例 迪米特法则是一种重要的设计模式,它也被称为最少知识原则(Least Knowledge Principle,LKP)。该原则的主要思想是,一个对象应当对其他对象有尽可能少的了解,或者说,不和陌生人说话...

    迪米特法测

    // 不违反迪米特法则,因为Department直接与Employee通信 foreach (var employee in _employees) { Console.WriteLine($"Employee Name: {employee.Name}"); } } } class Employee { public string Name { ...

    迪米特法则1

    迪米特法则的核心思想是:“只与你的直接朋友交谈,不跟‘陌生人’说话”。这里的“直接朋友”包括当前对象本身、成员对象、创建的对象以及方法参数,它们之间存在关联、聚合或组合关系。这意味着,当两个对象之间...

    22丨理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”? 1

    迪米特法则,又称最小知识原则,主张一个对象应该尽量减少对其他对象的了解,只与其直接相关的对象交互,避免通过第三方对象进行通信,以此降低耦合度。 迪米特法则的英文名Law of Demeter,强调了每个对象应该限制...

    读书笔记:java 23种设计模式 开闭原则 依赖倒转原则 迪米特法则 设计模式思想 Java入门demo.zip

    读书笔记:java 23种设计模式 开闭原则 依赖倒转原则 迪米特法则 设计模式思想 Java入门demo

    Java的设计模式编程中迪米特法则的应用示例

    `CompanyManager` 类调用了 `SubCompanyManager` 的 `getAllEmployee()` 方法,然后遍历返回的 `SubEmployee` 对象列表,这违反了迪米特法则,因为 `CompanyManager` 不应该直接与 `SubEmployee` 交互。 为了遵循...

    c#设计模式之迪米特原则

    这个原则规定了类与类之间的交互应该保持最低限度的了解,也就是说,一个对象应当只与它的直接朋友通信,而不应与陌生人交谈。在C#编程中,遵循迪米特原则有助于提高代码的可维护性、可扩展性和解耦性。 首先,我们...

    10-Flyweight.rar

    3. 当系统中不存在大量相同或相似对象,或者对象的创建成本不高时,使用享元模式可能并不划算。 总结来说,享元设计模式是一种优化资源利用、提高系统效率的有效手段,尤其适用于处理大量相似对象的情况。在实际...

    UML教程(1)-概述.ppt

    **UML教程(1)-概述** UML(Unified Modeling Language),统一建模语言,是软件工程领域一种广泛使用的建模工具,它提供了一种图形化的语言来描述、设计和可视化软件系统。本教程将从基础出发,详细介绍UML的核心...

    设计模式讲解课件PPT

    例如,你可以带朋友去快餐店,只需告诉服务员要汉堡,至于汉堡的种类,由朋友直接告诉服务员。这种方式增加了系统的灵活性,同时也遵循了"开闭原则",即对扩展开放,对修改关闭。 3. **建造者模式**:建造者模式将...

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    5.迪米特法则还有一个更简单的定义:只与直接的朋友通信。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的...

Global site tag (gtag.js) - Google Analytics