帮我避免多重继承又名。帮助我得到适当的oo设计

时间:2010-07-13 08:28:31

标签: design-patterns oop inheritance

我有两个类LightA和LightB。我有LightB的源代码,但不是LightA的源代码。我用LightDimDip扩展了LightB。即LightDimDip:extends LightB。现在我还需要将DimDip功能应用于lightB。

任何人都可以提出良好的OOP设计。

我再次提醒大家,我无法修改LightA。

1 个答案:

答案 0 :(得分:2)

灯具有通用接口吗?在这种情况下,我猜你可以在这里使用装饰模式

interface ILight { int GetIntensity() }
class LightA : ILight { int GetIntentisy(){ return 10; } }
class LightB : ILight { int GetIntensity(){ return 15; } }

class DimLight : ILight {
     public DimLight(ILight inner){}

     //Add behaviour inner
     int GetIntensity(){ return inner.GetIntensity() / 2; }
}

ILight dimLightA = new DimLight(new LightA())
ILight dimLightB = new DimLight(new LightB())

然后,您可以将灯光行为放在DimLight类中,并将其应用于任何实现ILight的类。