代理设计模式封装解决方案?

时间:2012-02-19 11:36:30

标签: c# design-patterns .net-4.0 delegates proxy-pattern

我想执行一个函数,但在此之前,我想验证密码。

我选择使用代理设计模式。


用文字说明:

创建Proxy类,

发送密码

如果密码正常,请告诉他执行什么功能

问题是根据代理模式,整个内部应该/更好地是私有的。

所以 - 我无法从方法1/2外面看到......

我不想让Method1/2 public(我不想要If)。我想使用代表。

那么,我如何(从外部)向他发送有效的Action参数? (ac param)

我应该为每个功能创建公共行动吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

通常,您要执行的方法不应该是代理类的一部分。这是该类调用者传递的方法:

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);