实现接口中尚未存在的方法的新组件

时间:2019-02-18 22:49:43

标签: c# design-patterns interface

我有两个类文件(WallSwitchProximitySwitch)-假设它们是第三方提供的组件-实现了以下方法的方法On()Off()一个IUserController接口,我已经在自己的核心消费系统中建立了该接口。

我还有三个类-也是第三方提供的-CeilingFanLightbulbCCTVCamera,它们从ICeilingComponent接口实现Methods,核心系统的一部分。这些ICeilingComponent实现类被实例化并注入到IUserController继承类中,例如:

ICeilingComponent component = new LightBulb();

IUserController controller = new WallSwitch(component);

然后...

controller.On();

controller.Off();

每个人都很开心。

我现在有了一个第三方提供的新组件DimmerSwitch,该组件还实现了IUserControllerOn()的{​​{1}}方法,但是{{1 }}类还实现了方法Off()DimmerSwitch,它们仅影响IncreasePower(int amount)和(可调光)DecreasePower(int amount),而不会影响CeilingFan

我想将其容纳在核心系统中,但是我无法理解如何在不强迫其他第三方组件更改其构造的情况下执行该操作,正如我已与他们签约的接口所描述的那样。这很重要。我必须有一种方法可以在核心系统中处理此问题,而不会影响其他地方的更改。

我无法正确理解哪种设计模式或接口方法?

我曾希望把这一切写下来能以某种方式为我提供解决方案。但是不。也许我现在看不到树木的木头。搜索了我认为正确的术语。当然,这肯定是一个普遍的问题。随意让我看起来很笨。

P.S。这显然不是现实世界中的问题-我当然不希望鼓励有关电压的讨论。但这也不是功课:我只希望自己还那么年轻。我只是想尽办法解决这个问题,以帮助我理解。任何回应表示赞赏(关于电荷的回应除外)。

1 个答案:

答案 0 :(得分:0)

我认为您可以像这样创建一个名为IEnhancedUserControl的增强接口

interface IEnhancedUserController : IUserController
{
void IncreasePower(int amount);
void DecreasePower(int amount);
}

然后,您的CeilingFan和Lightbulb会实现此增强的界面,而不是原始界面。这样,您可以避免更改其余代码,例如原始界面,CCTVCamera等。