`

什么是Law of Demeter

阅读更多

        今天一如昨日,继续对WebWork进行小打小闹式的研究。在听了Raimundo老大一番醍醐罐顶般的讲解之后,我觉得要理解WebWork(XWork)巧妙的设计,还是得从IoC看起。于是,我开始阅读WebWork官方文档中关于IoC的部分。
        在阅读的过程中,我发现了一个有趣的短语:Law of Demeter。文档对IoC的优势的描述,有这样一条:
        Adheres to Law of Demeter. Some people think this is silly, but in practise I've found it works much better. Each class is coupled to only what it actually uses (and it should never use too much) and no more. This encourages smaller responsibility specific classes which leads to cleaner design.
        意思很好懂,倒是Law of Demeter是一张新面孔。将这张新面孔Google了一把,才发现它原来是一个非常有名的OO系统设计原则,而且跟现在的热门话题AOP还颇有联系。自己真的好孤陋寡闻啊!
        Law of Demeter主要表述的是这样一个原则:一个unit(通常是一个类中的方法)只能拥有尽可能少的其他unit的信息。而另外的一个总结则是:一个方法只能拥有尽可能少有关对象模型的信息。根据如上的总结,在AOP中,将类的方法提取出来,并归纳成一个个Aspect,作为Aspect本身,对于对象模型的信息的了解就得到有效的减少了。否则的话,像日志或者权限控制功能通常都会散布各个类之中,那么对象模型的信息对于方法而言就显露无遗了。
        对于Law of Demeter更为正式的表述如下:对于对象 'O' 中一个方法'M',M应该只能够访问以下对象中的方法:
        1、对象O;
        2、与O直接相关的Component Object;
        3、由方法M创建或者实例化的对象;
        4、作为方法M的参数的对象。

        由于对Law of Demeter还是知之甚少,就不多说了。有兴趣的朋友,可以参考下面的资料。

    [1] Law of Demeter的发源地;
    [2] 一篇很不错的讲述Law of Demeter的文章   

分享到:
评论

相关推荐

    OPLib对象持久层 (源码)

    OPLib是一个基于ADO2.8和COM+技术的for VB6的对象持久层(Persistence Layer)框架,它实现了数据库和中间层的Broker功能,提供OR-Mapping,将关系数据库对象映射到Class,使中间层对数据库“无知”(Law of Demeter)。...

    JAVA Object-Oriented Design Principles.ppt

    Law of Demeter 是指一个类的方法不应该依赖其他类的结构,除非是它自己的结构。同时,每个方法应该只发送消息给有限的类集合。 坏设计的危害 坏设计可能会导致以下问题: * Rigidity:僵硬性,难以更改,可能会...

    设计模式总结

    设计模式总结、 -- 一,六大设计原则 一,六大设计原则 ... 迪米特法则(Law of Demeter) 也称最小知识原则,一个类应该对自己耦合或者调用的类知道的 越少越好。 开闭原则 对拓展开发,对修改关闭

    面向对象六大设计原则

    1、“开-闭”原则(Open-Closed Principle,OCP) 2、里氏替换原则(Liskov Substitution Principle,LSP) 3、依赖倒置原则(Dependence Inversion Principle,DIP) ...6、迪米特法则(Law of Demeter,LoD)

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

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

    面向对象七大原则

    5. 迪米特法则(Law of Demeter) 迪米特法则是指一个对象应该对其他对象保持最少的了解。这意味着一个对象不应该知道其他对象的内部细节。迪米特法则可以使代码更清晰、更易维护。 6. 里氏替换原则(Liskov ...

    2023年最新java面试题及答案

    5、迪米特法则(Law of Demeter,LoD)也称为最少知识原则,一个对象应该对其他对象有最少的了解。这意味着对象不应该直接与其不了解的对象进行交互,而是通过其直接的朋友对象进行通信。遵循这一原则可以减少类之间...

    设计模式面试题目汇总 资源

    ISP)、合成/聚合复用原则(Composite/Aggregate Reuse Principle,C/ARP)、最少知识原则(Least Knowledge Principle,LKP)或者迪米特法则(Law of Demeter,LOD)。 设计模式的分类了解吗?创建型模式、结构型...

    设计模式六大原则与类的六种关系

    5. 迪米特法则(Law of Demeter) 迪米特法则是指最少知道。尽量降低类与类间的耦合。迪米特法则主要是为了解决类与类之间的耦合问题。 6. 开闭原则(Open-Closed Principle) 开闭原则是指对扩展开放,对修改...

    Java设计模式学习.pdf

    - 迪米特原则(Law of Demeter):一个对象应该对其他对象有最少的了解。 3. 创建型模式和Java对象创建方式: - 简单工厂模式:通过一个工厂类根据输入参数来创建不同对象。 - Java对象创建的方式包括:new...

    Java设计模式——工厂设计模式

    LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。 核心本质: 实例化对象,用工厂方法代替new操作。 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实 现类解耦。 ...

    Swift行走江湖指南-设计模式.pdf

    迪米特法则(Law of Demeter)是指一个对象应该尽量少地与其他对象进行交互。这样可以降低模块之间的耦合度,提高代码的可维护性和可扩展性。 三路武功是软件设计模式的实践,包括创建类结构、类行为和类工厂模式等...

    09结构型模式1

    同时,外观模式也是“迪米特法则”(Law of Demeter)的一种实现,减少了类之间的耦合度。 外观模式的应用场景很广泛,例如: - **电源总开关**的例子中,`GeneralSwitchFacade` 是一个外观角色,它控制了灯光、...

    C++(设计模式)1.0.pdf

    - 迪米特法则(Law of Demeter, LoD):一个对象应该只与其直接朋友通信,不应该知道其朋友的朋友。 7. 以上原则分别解释了如何编写可维护、可扩展和易于理解的代码,是设计模式背后的理论基础。理解并应用这些...

    深入浅出的设计模式 ptf

    Closed Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface Segregation Principle)和迪米特法则(Law of Demeter),这些都...

    浅谈编程-浅谈编程-浅谈编程

    Closed Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface Segregation Principle)、里氏替换原则(Liskov Substitution Principle)、迪米特法则(Law of Demeter)和单一...

    设计模式六大原则详解 经典

    迪米特法则(Law of Demeter,LoD),又称最少知识原则,提倡一个对象应该尽量少地了解其他对象的内部细节。遵循这一原则可以减少类之间的交互,降低系统的复杂性,使得修改和扩展变得更容易。 这六大原则共同构成...

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

    迪米特原则(Law of Demeter,简称LoD)是面向对象设计中的一种设计原则,源自于1987年 Northeastern University 的一个研究项目。这个原则规定了类与类之间的交互应该保持最低限度的了解,也就是说,一个对象应当只...

    云安全 不断变化的监管挑战下有效的审计和密钥管理 - ruby.zip

    迪米特法则(Law of Demeter)在云安全中也占有一定地位,它是面向对象设计的一个原则,提倡降低对象之间的耦合度。在云环境中,遵循迪米特法则可以限制数据的传播,减少潜在的安全风险,提高系统的健壮性。 ...

Global site tag (gtag.js) - Google Analytics