Java里面的封装是否和迪米特法则有冲突

时间:2022-01-22 21:52:53
封装就是为了代码的复用以及被统一调用和管理,也就是说比如说封装一个方法,就是为了让所有相同的调用都来调用这个被封装的方法,或者是类对象
但是迪米特法则提出的是一个对象或者模块和其他的模块或者对象应该保持尽量少的通信,也就是说比如一个A对象应该尽量和一个单一的对象(暂且说B对象)进行通信,而其他的模块或者对象如果要用我的服务的应该去调用B对象,或者用调用B对象的C对象最终提供的服务,这样保证的模块的相对独立性,或者所说的模块化,
那么问题就出来了前者是为了提供所有对外的调用接口,而后者是为了尽量的独立不让其他不相关的调用.我想请问各位!

4 个解决方案

#2


给你举个例子吧,某地有很多武馆,每个武馆有一个师傅和许多徒弟。武术协会是他们的联盟。

封装说的是每个武馆需要一个馆长,有冲突时由馆长出面,不要下面一大群徒弟瞎嚷嚷。

迪米特法则说的是武馆与武馆要相互独立,比如不能出现某个馆长既当A武馆的馆长又当B武馆的馆长,不能出现某个学员既在A武馆学习又以B武馆学习,等等。否则如果某个武馆倒闭了,会影响其它武馆的运作。

#3


说个通俗易懂的吧


时间和空间的问题,追求效率,往往需要更多空间,在存储比较小的设备上往往需要牺牲效率来成全,所以必须要有一个折中,不可能同时效率极高,而空间占用极少


lz的问题跟这个问题是否神似?

#4


不是一个目的吗,封装就是隐藏客户端不关心的部分,提供统一接口,不就是为了减少交互吗,除了必要的通信接口,其他的负责操作都被封装了,只依赖接口通信,这难不就是解耦么

#1


#2


给你举个例子吧,某地有很多武馆,每个武馆有一个师傅和许多徒弟。武术协会是他们的联盟。

封装说的是每个武馆需要一个馆长,有冲突时由馆长出面,不要下面一大群徒弟瞎嚷嚷。

迪米特法则说的是武馆与武馆要相互独立,比如不能出现某个馆长既当A武馆的馆长又当B武馆的馆长,不能出现某个学员既在A武馆学习又以B武馆学习,等等。否则如果某个武馆倒闭了,会影响其它武馆的运作。

#3


说个通俗易懂的吧


时间和空间的问题,追求效率,往往需要更多空间,在存储比较小的设备上往往需要牺牲效率来成全,所以必须要有一个折中,不可能同时效率极高,而空间占用极少


lz的问题跟这个问题是否神似?

#4


不是一个目的吗,封装就是隐藏客户端不关心的部分,提供统一接口,不就是为了减少交互吗,除了必要的通信接口,其他的负责操作都被封装了,只依赖接口通信,这难不就是解耦么