gpt4 book ai didi

java - 为什么封装似乎与开闭原则相矛盾?

转载 作者:搜寻专家 更新时间:2023-11-01 04:06:02 35 4
gpt4 key购买 nike

在封装中,想法是通过将变量声明为私有(private)来隐藏类对其变量所做的操作,从而实现了 OCP。但是,为什么要添加 getter 和 setter,然后打开变量进行修改?

为什么要费尽心思将变量设置为私有(private),然后在其上添加公共(public) setter ?这样看起来限制不是很大,这是封装的思想之一。

最佳答案

opens up your variables for modification

开放-封闭原则中,“开放”一词的含义完全不同。

这意味着类的源代码已关闭以供修改,但生成的类工件已开放以通过扩展进行进一步修改。 “开放”和“封闭”都不是指类实例的任何方面。

另一方面,我同意你从一个稍微不同的角度对 getter/setter 的批评:他们添加了大量的样板只是为了将你的整体设计恢复到与具有公共(public)字段的类几乎相同的东西。

在某些不太常见的情况下,提供 getter/setter 仍然是值得的。这适用于属于库的公共(public) API 的类,并且通常适用于通过 setter 配置的具有一些重要行为的任何类。

对于纯数据类,getters/setters 主要是由于过时的框架拒绝与公共(public)字段一起工作的要求而被迫进入的。 Spring、Hibernate 和 Jackson 是最先进的框架示例,它们不会强制执行此操作。

关于java - 为什么封装似乎与开闭原则相矛盾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20633643/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com