拥有那种可以访问所有内容的上下文类与拥有全局变量非常相似。同样的缺点也适用。可以通过任何方法读取和更改全局变量。这将使用全局变量的所有内容相互耦合。耦合是不好的,因为当事物耦合时,一个对象的变化可能会导致另一个对象发生某些事情。当耦合程度增加时,管理复杂性变得非常困难(在我们的玩家类中,蝴蝶拍打翅膀可能会导致您的骰子类出现异常)。改变和额外的发展变得更加困难。难以检测和掩盖错误变得不可避免。
因此,例如,有一天在测试您的应用程序时,您可能会注意到您的 dice 对象表现得很奇怪。您调用 dice.roll() 并看到它有时会返回 1。但在这种情况下这是不可能的,因为您的玩家正在滚动其中两个。您调试并以某种方式注意到 numberOfDice 属性在某些时候更改为 1。使用像您这样的上下文方法,很难找到谁将 numberOfDice 更改为 1,因为每个人都可以通过您的上下文对象访问 dice。你明白了吗?
那么解决方案是什么?我喜欢的面向对象编程的隐喻之一是分而治之。你需要找到可以相互隔离的行为、过程、对象。您需要将问题划分为可管理的部分,这些部分可以与应用程序中发生的其他事情隔离开来。
学习如何做到这一点当然不容易,需要大量的学习、阅读、思考、讨论,当然还有编码。