我对封装和数据隐藏的整个术语感到有些困惑。我正在通过重构大师阅读一本书“深入研究设计模式”,当他解释封装是什么时,我认为有些不对劲。
我搜索了一下,发现了一个非常好的解释: https ://stackoverflow.com/a/28614407/11993214 。
他把封装误认为是数据隐藏。从上面的链接阅读答案后,我将其总结为这些定义:
encapsulation
- 当我们将使用这些数据的一段代码、数据和方法分开时,我们将它们打包在一起。
data hiding
- 是一个我们可以做的一切的地方,我们作为私人做,我们正在实施 getter 和 setter 作为我们可以访问这些数据的唯一地方。
但是当我阅读更多时,我变得更加困惑。他提出了一个话题:
Encapsulate what varies
。它有两个子类别 - 封装在方法级别和类级别。例如,它说要重新制作:
进入这个:
我认为这类似于上面链接中的问题的陈述。
Whatever changes encapsulate it. Protecting anything which is prone to change.
,对此的回答是:
(...) And 2, as noted by CommuSoft, isn't really a definition, it's a rule of thumb. And I will add that it's a rule of thumb about when to use data hiding, not encapsulation
所以现在,我从书中得到了这一部分,基于我给出的这个例子,我认为它更有可能是一个封装案例。但是,如果我的想法正确并且它类似于链接主题的引号,那么基于该答案,此示例代码是关于何时使用数据隐藏的经验法则?所以总结一下......如果我正确理解封装和数据隐藏,我真的很困惑。基于我提供的那些例子,我认为这个例子是封装。这是对的吗?如果是,那么它与引号中提到的主题有何不同?
我期待您的回答,如果整个解释不清楚,请给我反馈,我会尽力做得更好。