Помогите мне избежать множественного наследования ака. помогите мне получить правильный дизайн - PullRequest
0 голосов
/ 13 июля 2010

У меня есть два класса LightA и LightB. У меня есть исходный код LightB, но не LightA. Я расширил LightB с LightDimDip. то есть LightDimDip:extends LightB. Теперь мне нужно применить функцию DimDip и к lightB.

Может ли кто-нибудь предложить хороший дизайн ООП.

Еще раз напоминаю вам, что я не могу модифицировать LightA.

1 Ответ

2 голосов
/ 13 июля 2010

У светильников общий интерфейс? В таком случае, я думаю, вы можете использовать шаблон декоратора здесь

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

Затем вы можете поместить поведение light в класс DimLight и применить его к любому классу, который реализует ILight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...