У светильников общий интерфейс? В таком случае, я думаю, вы можете использовать шаблон декоратора здесь
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.