我有两个类文件(WallSwitch和ProximitySwitch) -让我们假设它们是第三方提供的组件-它们从我在我的核心消费系统中构建的IUserController接口实现方法On()和Off()。
我还有三个类-也是第三方提供的-即CeilingFan、Lightbulb和CCTVCamera,它们从ICeilingComponent接口实现方法,这是核心系统的一部分。这些ICeilingComponent-implementing类被实例化并注入到IUserController继承类中,例如:
ICeilingComponent component = new LightBulb();
IUserController controller = new WallSwitch(component);然后..。
controller.On();
controller.Off();大家都很开心。
现在,我有了一个由第三方提供的新组件DimmerSwitch,它还实现了On()和Off()的IUserController方法,但是DimmerSwitch类还实现了IncreasePower(int amount)和DecreasePower(int amount)方法,这只影响CeilingFan和(可调光)代码,而不影响< Lightbulb >d22。
我希望在核心系统中适应这一点,但我无法理解如何做到这一点,而不迫使其他第三方组件按照我与它们签约实现的接口的描述来更改其结构。这是最重要的一点。必须有一种方法可以在核心系统内处理此问题,而不会影响其他地方的更改。
我没有正确理解哪些设计模式或接口方法?
我曾希望把这一切都写下来,以某种方式为我提供一个解决方案。但不是的。也许我现在不能只见树木不见森林。我已经搜索了我认为合适的术语。这肯定是一个常见的问题。尽管让我看起来像个笨蛋。
附言:这显然不是一个现实世界的问题--我当然不希望鼓励关于电压的讨论。但这也不是家庭作业:我只希望我能那么年轻。我只是想弄清楚这个问题,以便更好地理解。感谢您的回复(关于电费的回复除外)。
发布于 2019-02-19 08:55:41
我认为您可以创建一个增强的接口,例如,名为IEnhancedUserControl,如下所示
interface IEnhancedUserController : IUserController
{
void IncreasePower(int amount);
void DecreasePower(int amount);
}然后你的CeilingFan和Lightbulb会实现这个增强的接口,而不是原来的接口。这样你就可以避免更改rest代码,如原始接口、CCTVCamera等。
https://stackoverflow.com/questions/54756517
复制相似问题