У меня есть несколько производных классов, которые наследуются от базового класса.Каждый производный класс по-прежнему имеет уникальных членов.Один из этих производных классов должен иметь доступ ко всем членам другого производного класса.Моя цель в решении этой проблемы - написать как можно меньше кода.
Было бы небрежно или неуместно инициализировать все члены производных классов в базовом классе, чтобы один из производных классов мог получить доступ к этим членамвместо инициализации их в указанном производном классе?
Предлагаемый подход:
public class BaseClass {
public BaseClass() {
...
der1Initializer = Der1Initializer(new Factory1());
der2Initializer = Der1Initializer(new Factory2());
List initializers = new List(){ der1Initializer , der2Initializer };
der3Initializer = Der3Initializer(initializers);
}
Der1Initializer der1Initializer;
Der2Initializer der2Initializer;
Der3Initializer der3Initializer;
}
public class DerivedClass1 : BaseClass {
public SomeFunction {
der1Initializer.init();
}
}
public class DerivedClass2 : BaseClass {
public SomeFunction {
der2Initializer.init();
}
}
public class DerivedClass3 : BaseClass {
...
}
Так что:
public class Der3Initializer {
public GroupInitializationFunction {
initializers[0].init(); //der1Initializer
initializers[1].init(); //der2Initializer
}
}
Вместо:
public class BaseClass {
public BaseClass() {
...
}
public class DerivedClass1 : BaseClass {
public DerivedClass1 {
der1Initializer = Der1Initializer(new Factory1());
}
public SomeFunction {
der1Initializer.init();
}
Der1Initializer der1Initializer;
}
public class DerivedClass2 : BaseClass {
public DerivedClass2 {
der2Initializer = Der2Initializer(new Factory2());
}
public SomeFunction {
der2Initializer.init();
}
Der2Initializer der2Initializer;
}
public class DerivedClass3 : BaseClass {
public DerivedClass3 {
List initializers = new List()
{
Der1Initializer(new Factory1()),
Der2Initializer(new Factory2());
};
der3Initializer = Der3Initializer(initializers);
}
...
Der3Initializer der3Initializer;
}
...
public class Der3Initializer {
public GroupInitializationFunction {
initializers[0].init(); //der1Initializer
initializers[1].init(); //der2Initializer
}
}
Это огромное упрощение "проблемы".Цель этого кода - уменьшить количество дублирующегося кода и необходимость повторной инициализации членов, которые могут быть использованы совместно, и оптимизировать производительность.
Я знаю, что не всегда хорошая идея предоставлять другим классам доступ к членамони не используют.
Я просто подумал, что это интересная проблема, связанная с разделением кода и дублированием кода.