Proxy Design Pattern решение для инкапсуляции? - PullRequest
1 голос
/ 19 февраля 2012

Я хочу выполнить функцию, но перед этим я хочу проверить пароль.

Я решил использовать Proxy Design Pattern.


словами:

создать класс Proxy,

отправить пароль,

и скажите ему КАКУЮ ФУНКЦИЮ ВЫПОЛНИТЬ если пароль в порядке.

проблема в том, что в соответствии с Proxy Pattern все внутреннее устройство должно / лучше быть частным.

так что - я не вижу снаружи Method1 / 2 ...

и я не хочу делать Method1/2 public (и я не хочу, если это). Я хочу использовать делегатов.

Итак, как (со стороны) я могу отправить ему действительный Action параметр? (ac параметр)

Должен ли я создать для каждой функции публичное Действие?

enter image description here

1 Ответ

2 голосов
/ 19 февраля 2012

Обычно метод, который вы хотите выполнить, не должен быть частью вашего прокси-класса. Это метод, который передает вызывающая сторона этого класса:

public class ProxyClass
{
    public ProxyClass(string password, Action ac)
    {
        if (password == "111")
        {
            ac();
        }
    }
}

и затем вы можете передать Action в качестве второго аргумента:

var proxy = new ProxyClass("111", () => 
{
    ... some code that you want to execute in case of success
});

или если у вас уже определен какой-либо метод:

public class Foo
{
    public void Success() 
    {
        ... some code that you want to execute in case of success
    }
}

Вы могли бы:

var foo = new Foo();
var proxy = new ProxyClass("111", foo.Success);

, если Success был статическим методом, вам не нужен экземпляр Foo:

var proxy = new ProxyClass("111", Foo.Success);
...