我有一个容器,里面有 8 个继电器。现在我想让客户端打开/关闭不同的继电器。到目前为止,一切都很好。
一种解决方案可能是:
container.tryTurnOn(1, true);
container.turnRandomOn(true); //turn relais random to on or not.
1表示relais 1,true表示尝试开启;false 意味着尝试将其关闭。如果我要添加更多与继电器本身相关的方法(改变颜色,自毁或其他一些创造性的东西^^),而不是容器,容器接口将会长大。
所以我认为一个好主意是为每个继电器都有一个自己的课程,这样你就可以做这样的事情
container.getRelais(1).tryTurnOn(true);
container.turnRandomOn(true); //this stay the same
现在我也有不同的规则: 它只允许 8 个继电器中的 6 个可以设置为打开。(容器的任务确保这一点)。
所以在那种情况下我有几个问题:
我从 getRelais 得到的 Relais 是贫血的,它只保持 relais 状态,但功能在容器中,因为只有容器知道是否允许 tryTurnOn(true)。(或者我应该将行为放入继电器中,通过容器访问其他继电器?) 我遇到的第二个问题是循环依赖:继电器发送打开容器的愿望,所以它必须知道容器。容器还必须知道它的子节点(relais),以检查是否有比 6 更多的relais根据结果,他直接从继电器访问状态并更改它。
- 那么还有其他解决方案吗?
- 如何解决这个循环、封装、告诉-不问的问题
- 我必须做的,到这里来一个面向对象的方法
问题的一种扩展:
也许我想在那里添加更多规则:
- 管理员可以打开 7 个继电器,普通用户只能打开 6 个继电器。
- 如果我的模型中可能的太阳亮度超过 80%,则只允许打开 3 个继电器(管理员和普通用户)。
- 如果阳光超过 95%,控制器将关闭所有继电器。
您将如何以 OO 风格对这些进行建模?问题域看起来非常有凝聚力,因为所有人都必须了解所有人。你会把行为放在哪里,你会把行为分成不同的组件吗?我现在不知道如何以 OO 风格执行此操作,对我来说,无论如何都会在某些过程代码中产生结果。但这就是我问的原因^^