我有一个 OOP 设计问题(我使用的是 java,但问题更笼统)。我正在编写家庭自动化模拟器,但我在设计它时遇到了一些麻烦。每个设备都有一个类,例如带有相应方法的TV或Heating ,例如volumeUp(),......我想为设备和传感器解耦类,它们正在生成事件并在它们上执行操作。我可以想到这一点:我将实现观察者模式以将事件从传感器传播到警报类。警报类如下所示:
class Alarm implements Observer {
Action action;
public update(...) { action.do() }
}
现在,因为我想让用户能够任意耦合传感器和他们在用户界面中触发的动作,所以我考虑为每个设备上的每个动作创建单独的类
class ActionTVVolumeUp implements Action {
Television tv;
ActionTVVolumeUp(Television tv) { this.tv = tv; }
public void do() { tv.volumeUp() }
}
然后当用户在用户界面中指定传感器(MotionSensor,LightSensor,...)并触发动作时,我将创建具有所需动作的警报实例,观察所需的传感器。这样做的问题是我将需要很多很多动作类(可能通过使用诸如 VolumeControllable 之类的设备将实现的接口来减少它们)。
有什么我遗漏的吗?这可以更简单/不需要使用这么多的 Action 类吗?谢谢你。