-
迪米特法则中看不懂的"朋友"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也无法避免。如此看来,迪米特法则应该理解为:“不要窥探朋友的隐私”才对,依赖一次就够了,不要继续深入;我也实在是想不到第二个反例了。
2011年6月02日 19:01
目前还没有答案
相关推荐
迪米特法则得名于希腊神话中的先知迪米特,其核心思想是“只与你的直接朋友交谈”。这一原则旨在降低类之间的耦合性,提高软件的可维护性和可扩展性。 迪米特法则的具体内容包括以下几个方面: 1. **每个对象应该...
迪米特法则(Law of Demeter,简称LoD)是面向对象设计中的一种重要原则,源自1987年在 Northeastern University 提出。这个法则旨在降低类与类之间的耦合,提高系统的可维护性和可扩展性。在中文环境中,迪米特法则...
这体现了迪米特法则,因为`Form1`不是`Form2`的直接朋友,它通过公开的事件来传递信息,而不是直接访问`Form2`的内部状态。 `MessageEventArgs.cs`可能是自定义的事件参数类,用于在事件中传递数据。这种方式允许`...
设计模式6大原则:迪米特法则
迪米特法则主张一个对象应该尽量减少与其他对象的交互,只与直接的朋友交流,以此提高系统的内聚性和可维护性。 门面模式的核心思想是为一个复杂的子系统提供一个简洁的接口。客户角色通过门面角色来与子系统进行...
根据迪米特法则,一个对象应该尽量减少对其他对象的了解,即一个类应当只与它的直接朋友交互,而不是与远方的陌生人直接通信。 在描述的示例中,我们有一个由Someone、Friend和Stranger三个类组成的系统。Someone和...
迪米特法则,亦称最少知道原则,是在Java编程领域中一个非常重要的设计原则。这个原则指导我们在设计类和方法的时候,需要尽量减少类与类之间的交互和依赖,以达到降低耦合的目的。迪米特法则不仅有助于提高代码的...
C++设计模式迪米特法则实例 迪米特法则是一种重要的设计模式,它也被称为最少知识原则(Least Knowledge Principle,LKP)。该原则的主要思想是,一个对象应当对其他对象有尽可能少的了解,或者说,不和陌生人说话...
// 不违反迪米特法则,因为Department直接与Employee通信 foreach (var employee in _employees) { Console.WriteLine($"Employee Name: {employee.Name}"); } } } class Employee { public string Name { ...
迪米特法则的核心思想是:“只与你的直接朋友交谈,不跟‘陌生人’说话”。这里的“直接朋友”包括当前对象本身、成员对象、创建的对象以及方法参数,它们之间存在关联、聚合或组合关系。这意味着,当两个对象之间...
迪米特法则,又称最小知识原则,主张一个对象应该尽量减少对其他对象的了解,只与其直接相关的对象交互,避免通过第三方对象进行通信,以此降低耦合度。 迪米特法则的英文名Law of Demeter,强调了每个对象应该限制...
读书笔记:java 23种设计模式 开闭原则 依赖倒转原则 迪米特法则 设计模式思想 Java入门demo
`CompanyManager` 类调用了 `SubCompanyManager` 的 `getAllEmployee()` 方法,然后遍历返回的 `SubEmployee` 对象列表,这违反了迪米特法则,因为 `CompanyManager` 不应该直接与 `SubEmployee` 交互。 为了遵循...
这个原则规定了类与类之间的交互应该保持最低限度的了解,也就是说,一个对象应当只与它的直接朋友通信,而不应与陌生人交谈。在C#编程中,遵循迪米特原则有助于提高代码的可维护性、可扩展性和解耦性。 首先,我们...
3. 当系统中不存在大量相同或相似对象,或者对象的创建成本不高时,使用享元模式可能并不划算。 总结来说,享元设计模式是一种优化资源利用、提高系统效率的有效手段,尤其适用于处理大量相似对象的情况。在实际...
**UML教程(1)-概述** UML(Unified Modeling Language),统一建模语言,是软件工程领域一种广泛使用的建模工具,它提供了一种图形化的语言来描述、设计和可视化软件系统。本教程将从基础出发,详细介绍UML的核心...
例如,你可以带朋友去快餐店,只需告诉服务员要汉堡,至于汉堡的种类,由朋友直接告诉服务员。这种方式增加了系统的灵活性,同时也遵循了"开闭原则",即对扩展开放,对修改关闭。 3. **建造者模式**:建造者模式将...
5.迪米特法则还有一个更简单的定义:只与直接的朋友通信。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的...