2010-07-13 50 views
0

我有两个类LightA和LightB。我有LightB的源代码,但没有LightA的源代码。我用LightDimDip扩展了LightB。即LightDimDip:extends LightB。现在我需要将DimDip功能应用于lightB。帮助我避免多重继承。帮助我获得适当的oo设计

任何人都可以建议良好的面向对象设计。

我再次提醒你们,我不能修改LightA。

+2

我建议你从好的类名开始。 LightA,LightB和LightDimDip不会告诉任何人他们的用途! – 2010-07-13 09:10:16

回答

2

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

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公司任何类别。

+0

这个问题说明LightA类在这一点上是不可修改的。 – 2010-07-13 09:30:37

+0

@ Whiskey-Tango-Foxtrot这就是为什么我问在响应的第一行是否有共同的界面。 – amarsuperstar 2010-07-13 09:31:57

+0

我有一个根类(NSobject) – shakthi 2010-07-14 05:35:00