什么是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的文章   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 的设计模式并没有八大原则,但是设计模式中常用的一些原则包括以下几个: 1. 开闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。 2. 单一职责原则(Single Responsibility Principle,SRP):一个类只负责一个功能或者只有一个引起它变化的原因。 3. 里氏替换原则(Liskov Substitution Principle,LSP):子类必须能够替换掉它们的父类并且保持程序的正确性。 4. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖于底层模块,两者都应该依赖于抽象。 5. 接口隔离原则(Interface Segregation Principle,ISP):不应该强迫客户端依赖于它们不需要的接口。 6. 组合/聚合复用原则(Composite/Aggregate Reuse Principle,CARP):优先使用组合或聚合关系复用代码,而不是继承。 7. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有最少的了解,不和陌生人说话,只和你的朋友(也就是直接的朋友)通信。 8. 最少知识原则(Least Knowledge Principle,LKP):一个软件实体应当尽可能少地与其他实体发生相互作用,使得系统中的各个部分更独立。 这些原则都是为了提高代码的可维护性、可扩展性、可重用性和可测试性,是面向对象设计和编程中非常重要的基本原则。在实际的软件开发中,应该根据具体的情况选择合适的原则进行应用。同时,这些原则也是设计模式的基础,很多设计模式都是基于这些原则的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值