正如前面所讨论的 ,适当的封装导致完全不存在“裸数据”。 但是,问题仍然存在:如果对象无法交换数据,该如何交互? 最终,我们必须公开一些数据以便其他对象使用它,对吗? 是的,这是真的。 但是,我想我有一个解决方案,可以在允许对象交互的同时保持封装不变。
愤怒的公牛(1980),马丁·斯科塞斯(Martin Scorsese)
说这是我们的目标:
class Temperature {
private int t;
public String toString() {
return String.format("%d C", this.t);
}
}
它代表温度。 它显示的唯一行为是打印摄氏温度。 我们不想公开t
,因为这将导致“裸数据”问题。 我们要保持t
秘密,这是一个美好的愿望。
现在,我们希望能够以华氏度打印温度。 最明显的方法是引入另一个方法toFahrenheitString()
或向对象添加一个布尔标志,这将更改toString()
方法的行为,对吗? 这些解决方案中的任何一个都比添加方法getT()
更好,但是没有一个是完美的。
如果我们创建此装饰器怎么办:
翻译自: https://www.javacodegeeks.com/2016/12/can-objects-friends.html