我想执行一个函数,但在此之前,我想验证密码。
我选择使用代理设计模式。
用文字说明:
创建Proxy类,
发送密码
如果密码正常,请告诉他执行什么功能。问题是根据代理模式,整个内部应该/更好地是私有的。
所以 - 我无法从方法1/2外面看到......
我不想让Method1/2
public
(我不想要If)。我想使用代表。
那么,我如何(从外部)向他发送有效的Action
参数? (ac
param)
我应该为每个功能创建公共行动吗?
答案 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);