Как называется этот шаблон проектирования (предоставление частного метода сотруднику через делегата)? - PullRequest
4 голосов
/ 10 декабря 2010

Как называется шаблон проектирования, в котором класс предоставляет свой метод или свойство частному сотруднику через делегата?Это в C #, но может относиться и к другим языкам.

Например:

class Foo
{
    public int X
    {
        get;
        private set;
    }

    public void UpdateX(Bar bar)
    {
        bar.UpdateX(x => this.X = x);
    }
}

class Bar
{
    public void UpdateX(Action<int> setter)
    {
        setter(7);
    }
}

Foo foo = new Foo();
Bar bar = new Bar();
foo.UpdateX(bar);

Я думаю, что это было бы полезно в шаблоне состояний, чтобы государства могли обновлять свои контексты безтребование контекста выставить материал через открытый интерфейс или вложить классы состояний в класс контекста.

Ответы [ 5 ]

1 голос
/ 10 декабря 2010
1 голос
/ 10 декабря 2010

Я не вижу здесь никакого паттерна, но это разрыв инкапсуляции.

если у вас есть свойство только для чтения, почему вы пытаетесь его обойти?

0 голосов
/ 10 декабря 2010

Я возьму Двойную отправку за 200. И хорошо на вашем пути к шаблону посетителя.

Я бы также сказал, что это не нарушает инкапсуляцию просто потому, что Foo определяет делегат.

0 голосов
/ 10 декабря 2010

Это имеет поразительное сходство с паттерном Memento, который действительно полезен для хранения и манипулирования состояниями.

Он также имеет элементы внедрения зависимости или делегирования.

Возможно, кто-то более опытный, чем я, узнает по его истинному имени.

Вот некоторая информация о паттерне Memento:
Википедия: Памятка

И шаблон внедрения зависимости:
Википедия: Внедрение зависимостей

0 голосов
/ 10 декабря 2010

Делегирование - это шаблон проектирования.

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