Допустим, у меня есть класс, который принимает делегат:Разбивает ли шаблон делегирования делегат?
public class DelegateContainer
{
private IDelegate delegate;
public DelegateContainer(IDelegate delegate)
{
this.delegate = delegate;
}
public void doSomething()
{
delegate.doSomethingOnlyForThisPurpose();
}
{
Как вы можете видеть, метод делегата doSomethingOnlyForThisPurpose() существует только называться классом делегирующей. Однако требуется, чтобы этот метод был общедоступным и мог быть выполнен любым. Если это абсолютно не должно выполняться ничем иным, кроме делегирующего класса, к которому он присоединен (особенно если делегирующий класс проходит в зависимости), разве это не разрушает инкапсуляцию? Единственный способ, которым я решил обойти это, - это усовершенствовать объект, который может быть создан только делегирующим классом (внутренним классом), который передается каждому вызванному методу. Тем не менее, это очень запутанно и не является водонепроницаемым. Есть ли какой-либо путь вокруг этого или это патологический?
Примечание: Я хочу придерживаться этого композиционного подхода, поэтому я бы предпочел не прибегать к наследованию.