C# 代理设计模式封装解决方案?
我想执行一个函数,但在此之前,我想验证密码 我选择使用代理设计模式C# 代理设计模式封装解决方案?,c#,design-patterns,.net-4.0,delegates,proxy-pattern,C#,Design Patterns,.net 4.0,Delegates,Proxy Pattern,我想执行一个函数,但在此之前,我想验证密码 我选择使用代理设计模式 简言之: 创建代理类 发送密码 如果密码正确,告诉他执行什么函数 问题是,根据代理模式,整个内部应该/最好是私有的 所以-我无法从方法之外看到1/2 我不想把方法1/2公诸于众(我也不想要If)。我想使用代理 那么,我如何(从外部)向他发送有效的Actionparam?(空调acparam) 我是否应该为每项活动制定一项公共行动 通常,要执行的方法不应是代理类的一部分。该类的调用方正在传递的方法: public class P
简言之: 创建代理类 发送密码 如果密码正确,告诉他执行什么函数 问题是,根据代理模式,整个内部应该/最好是私有的 所以-我无法从方法之外看到1/2 我不想把
方法1/2
公诸于众
(我也不想要If)。我想使用代理
那么,我如何(从外部)向他发送有效的Action
param?(空调ac
param)
我是否应该为每项活动制定一项公共行动
通常,要执行的方法不应是代理类的一部分。该类的调用方正在传递的方法:
public class ProxyClass
{
public ProxyClass(string password, Action ac)
{
if (password == "111")
{
ac();
}
}
}
然后可以将操作作为第二个参数传递:
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);
当然,如果成功是一种静态方法,则不需要Foo
的实例:
var proxy = new ProxyClass("111", Foo.Success);
那么method1/2()应该对代理的调用者可见吗?@RoyiNamir,好吧,如果你像你那样在代理中定义它们,那么是的,它们应该可见,以便调用者可以决定调用哪一个。如果这些方法不是代理类的一部分,那么调用方可以从其他地方传递它们。但是,当然,因为调用方需要将一个操作作为第二个参数传递给构造函数,所以调用方应该知道这个操作。我觉得奇怪的是,它使用的设计模式是访问控制-强制我将方法作为公共/对每个人可见的方式。。。。。