Getter-Setter和私有变量
Getter-Setter and private variables问题产生的原因是为了保护对象的封装性和数据的安全性。在编程中,我们通常会使用private关键字将变量声明为私有,在类的外部不能直接访问这些变量。为了让外部代码能够访问和修改这些私有变量,我们通常会提供公共的getter和setter方法。
然而,有时候我们希望只允许外部代码访问变量的一部分,而不是全部。在这种情况下,直接提供一个通用的getter和setter方法就会破坏对象的封装性,因为外部代码可以通过setter方法修改对象的任意属性,而不受限制。
为了解决这个问题,我们可以根据需要提供特定的getter和setter方法。例如,假设我们有一个包含X和Y坐标的Dimension对象,我们可以只提供getX和getY方法来获取这两个坐标的值,而不提供通用的getter和setter方法。这样,外部代码就只能获取坐标的值,而不能修改坐标的值。
下面是一个示例代码:
public int getDimensionX() { return cannotBeChanged.getX(); } public int getDimensionY() { return cannotBeChanged.getY(); }
通过这种方式,我们可以控制外部代码对私有变量的访问,提高对象的封装性和数据的安全性。这样,我们可以更好地保护对象的状态,避免不必要的错误和风险。
Getter-Setter和私有变量是程序中常见的一种设计模式。它们的目的是允许外部实体访问程序中的安全变量。下面将讨论为什么需要这种设计模式以及解决方法。
首先,程序员需要为外部实体提供一种访问受保护变量的方式。为了保护程序的安全性,我们不应该直接提供setter方法,只提供getter方法。只有那些在程序运行过程中可能会发生变化的属性才应该有setter方法。
其次,setter方法可以用来对某些属性施加限制。例如,可以对属性值进行无效值检查、预填充、逻辑分析、填充另一个依赖属性、防御性复制等等。
此外,getter和setter方法有助于维护系统的软件熵。软件熵是指系统中的混乱程度。如果我们使用getter和setter来访问属性,可以更好地控制系统的混乱程度。
然而,不应该在不需要的地方创建getter和setter方法,因为这会导致模板代码的产生。模板代码是指那些重复、冗余的代码。只有在将来可能需要对程序进行扩展时,才应该使用getter和setter方法。例如,如果我们要升级日志记录库,只需更改getter和setter方法的实现即可。
总之,Getter-Setter和私有变量是一种常见的设计模式,它们为外部实体提供了一种访问受保护变量的方式。通过只提供getter方法和有选择地提供setter方法,我们可以更好地保护程序的安全性。此外,getter和setter方法还有助于维护系统的软件熵,并为将来对程序进行扩展提供了方便。然而,我们应该避免在不需要的地方创建getter和setter方法,以减少模板代码的产生。
Getter-Setter and private variables是一个在编程中经常出现的问题。它的出现原因是因为在代码中使用了public fields或者不必要的getters和setters。这些做法可能会导致一些问题的出现。解决这个问题的方法是只在真正需要的地方使用getters和setters,并且让类型暴露更大的行为,而不仅仅是作为状态的存储库。
在《Clean Code》这本书中,对于getters和setters有以下几个结论:
1. 使用public fields是非常不好的。
2. 在不需要的地方使用getters和setters也是有问题的。
3. 好的做法是只在真正需要的地方使用getters和setters,让类型暴露更大的行为。
这里的"evil"一词是指在默认情况下使用这些做法可能会导致问题的发生,而并非真正的邪恶。在编程中没有什么是邪恶的(除了在C语言中可能从你的鼻子里飞出的鼻妖;))。然而,如果默认情况下使用这些做法,可能会导致一些问题的出现。