面向对象设计原则05-最少知识原则.doc

面向对象设计原则05-最少知识原则.doc

ID:57649733

大小:153.00 KB

页数:5页

时间:2020-08-30

面向对象设计原则05-最少知识原则.doc_第1页
面向对象设计原则05-最少知识原则.doc_第2页
面向对象设计原则05-最少知识原则.doc_第3页
面向对象设计原则05-最少知识原则.doc_第4页
面向对象设计原则05-最少知识原则.doc_第5页
资源描述:

《面向对象设计原则05-最少知识原则.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、迪米特法则,又叫最少知识原则,就是说,一个对象应当对其他对象有尽可能少的了解。ξ11.1迪米特法则的各种表述①只与你直接的朋友们通信;②不要跟“陌生人”说话;③每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。ξ11.2狭义的迪米特法则☆如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另外一个类的某一个方法,可以通过第三者转发这个调用。参考下例,Someone、Friend和Stranger三个类。Someone类有一个方法接受一个Friend类型的变量

2、:public class Someone...{    public void operation1( Friend friend )    ...{        Stranger stranger = friend.provide() ;        stranger.operation3() ;    }}所以Someone和Friend是朋友类(直接通讯的类)。同理,Friend类持有一个Stranger类的私有对象,他们是朋友类:public class Friend...{    private Stranger s

3、tranger = new Stranger() ;    public void operation2()...{}    public Stranger provide()第5页共5页    ...{        return stranger ;    }}在这里,Someone类和Stranger类不是朋友类,但Someone类却通过Friend类知道了Stranger类的存在,这显然违反迪米特法则。现在,我们对Someone和Friend类进行重构。首先在Friend类里添加一个方法,封装对Stranger类的操作:pu

4、blic class Friend...{    private Stranger stranger = new Stranger() ;    public void operation2()...{}    public Stranger provide()    ...{        return stranger ;    }    public void forward()    ...{        stranger.operation3() ;    }}然后,我们重构Someone的operation1方法,让其

5、调用新提供的forward方法:public class Someone...{    public void operation1( Friend friend )    ...{        friend.forward() ;第5页共5页    }}现在Someone对Stranger的依赖完全通过Friend隔离,这样的结构已经符合狭义迪米特法则了。仔细观察上述结构,会发现狭义迪米特法则一个明显的缺点:会在系统里造出大量的小方法,散落在系统的各个角落。这些方法仅仅是传递间接的调用,因此与系统的商务逻辑无关,当设计师试图从一

6、张类图看出总体的框架时,这些小的方法会造成迷惑和困扰。遵循迪米特法则会使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。结合依赖倒转原则,我们对代码进行如下重构来解决这个问题,首先添加一个抽象的Stranger类,使Someone依赖于抽象的“Stranger”角色,而不是具体实现:public abstractclassAbstractStranger...{    abstract void operation3() ;}

7、然后,让Stranger从该类继承:public class Stranger extends AbstractStranger...{    public void operation3() ...{}}随后,我们重构Someone使其依赖抽象的Stranger角色:public class Someone...{    public void operation1( Friend friend )    ...{        AbstractStranger stranger = friend.provide() ;第5页共5

8、页        stranger.operation3() ;    }}最后,我们重构Friend的provide方法,使其返回抽象角色:public class Friend...{    private Stranger st

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。