2010-07-13 40 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