我使用复合模式来表示设备,我想在关闭它们的电源(调用它们的 dtor)之前关闭它们。我在尝试对设备进行分组时遇到了问题,尤其是关于它们的状态。
在以下情况下我将如何进行:
class IDevice
{
public:
virtual void shutdown() = 0;
virtual void turn_on() = 0;
virtual bool is_on() const = 0;
}
class Router: public IDevice {...};
class Computer: public IDevice {...};
class Monitor: public IDevice {...};
// etc...
class WorkStation: public IDevice {...};
工作站可能包含多个设备,您需要在停止工作站电力之前安全地关闭所有设备。(在这个比喻中,我很便宜)。还值得注意的是,我永远不会希望任何一个设备自行打开 - 一切都将始终作为一个单元。
当其中一个内部设备不想安全关闭时,问题就出现了——它会抛出异常(例如,计算机的程序阻止它关闭)。
is_on() 在那种状态下应该返回什么?连续的方法调用应该做什么?或者,我可以使用另一种设计模式来更好地表示我的问题吗?