您的位置:首页 > 其它

[设计模式原则]迪米特法则(Law of Demeter, LoD)

2014-04-08 11:11 337 查看
talk only to your immediate friends

“朋友”条件:
1)当前对象本身(this)
2)以参量形式传入到当前对象方法中的对象
3)当前对象的实例变量直接引用的对象
4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友
5)当前对象所创建的对象
任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。
另外一个说法就是:
我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。
可以参照依赖注入或者称控制反转的方式来理解,依赖注入最基本的三种方式:构造器注入,set注入,依赖获取
1,系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度

2,门面模式和调停者模式实际上就是迪米特法则的应用

调停者模式:



门面模式:



门面模式和调停者模式之间的区别:

门面模式是以封装和隔离为主要任务,

调停者模式则是以调和同事类之间的关系为主,因为要调和,所以具有了子系统的业务逻辑控制。

功能区别:

门面模式只增加了一个门面,他对子系统来说没有增加任何的功能,子系统若脱离门面独立运行完全是可以的。

调停者模式则增加了业务功能,它把各个同事类中的原有耦合关系移植到了调停者,同事类不可能脱离调停者而独立存在。

知晓状态不同:

对门面模式来说,子系统部知道有门面存在,

对调停者来说,每个同事类都知道调停者的存在,因为要依靠调停者调和同事之间的关系

封装程度不同:

门面模式是一种简单的封装,所有的请求处理都委托给子系统完成,

调停者模式则需要有一个中心,由中心协调同事类完成,并且中心本身也完成部分业务,它属于更进一步的业务封装

参考:

设计模式(15)-Facade Pattern

《JAVA与模式》之调停者模式

门面模式VS中介者模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: