有人告诉我们应该避免 setter 和 getter。关于它有各种各样的想法,但根据我的说法,使用这些会破坏封装。为什么?因为它告诉世界一个物体的内部结构。例如:
class Point {
private int x;
private int y;
void setx(int x) {...}
int getx() {...}
...
}
该对象应该只公开行为,为客户端提供清晰的抽象。
class Point {
private int x;
private int y;
int coordinate(int x) {...} // 0, 1, 2, 3
...
}
那么,这些访问器和设置器方法是否破坏了封装?
From here:
拥有 getter 和 setter 本身并不会破坏封装。
破坏封装的是拥有 getter 和 setter
每个数据成员(Java 术语中的每个字段)。那就是一步之遥
公开所有数据成员。
封装的重点不是你不应该知道
或者从对象外部更改对象的状态,但是您
应该有一个合理的政策来做到这一点。
考虑一个 Person 类的例子。假设一个人有一个名字,
社会安全号码和年龄。假设我们不允许
人们永远改变他们的名字或社会安全号码。然而,
该人的年龄每年应增加 1。在这种情况下,
您将提供一个构造函数来初始化名称和
SSN 为给定值,这会将年龄初始化为 0。您
还将提供一个方法incrementAge(),这会增加
年龄增加 1。您还可以为这三个对象提供吸气剂。没有二传手
在这种情况下需要。
在此设计中,您允许检查对象的状态
在类之外,并且您允许从外部更改它
班级。但是,您不允许任意更改状态。
有一项政策有效规定姓名和 SSN
根本无法改变,年龄可以加1
一次一年。
现在假设一个人也有工资。人们可以换工作
随意,这意味着他们的工资也会改变。为了模拟这个
这种情况我们没有办法,只能提供一个setSalary()方法!
允许工资随意变动是完全合理的
在这种情况下的政策。
顺便说一下,在你的例子中,我会给冰箱班
putCheese() 和 takeCheese() 方法,而不是 get_cheese() 和
set_cheese()。那么你仍然会有封装。
您还可以参考:为什么 getter 和 setter 方法是邪恶的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)