2010-07-13 3 views
0

LightA와 LightB의 두 클래스가 있습니다. 나는 LightB의 소스 코드를 가지고 있지만 LightA의 소스 코드는 가지고 있지 않다. LightDimDip으로 LightB를 확장했습니다. 즉 LightDimDip:extends LightB입니다. 이제 lightB에도 DimDip 기능을 적용해야합니다.일명 다중 상속을 피할 수있게 도와주세요. 내가 올바른 oo 디자인을 얻을 수 있도록 도와주세요

누구나 좋은 OOP 디자인을 제안 할 수 있습니까?

다시 한번 LightA를 수정할 수 없다는 사실을 상기시켜드립니다.

+2

좋은 수업 명으로 시작하는 것이 좋습니다. LightA, LightB 및 LightDimDip은 아무에게도 자신이 원하는 것을 말하지 않습니다! –

답변

2

표시등에 공통 인터페이스가 있습니까? 이 경우에 나는 당신이 그런 다음 DimLight 클래스에서 빛 동작을 넣어 아이 라이트를 구현하는 모든 클래스에 적용 할 수 있습니다 데코레이터 패턴 여기

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()) 

을 사용할 수있는 것 같아요.

+0

LightA 클래스는이 시점에서 수정할 수 없다고하는 질문이 있습니다. –

+0

@ Whisky-Tango-Foxtrot는 응답의 첫 번째 줄에 공통 인터페이스가 있는지 물었습니다. – amarsuperstar

+0

루트 클래스 (NSobject)가 있습니다. – shakthi

관련 문제