代理模式(Proxy) 之c#

文章场景取自日常工作中,先大概描述一下,小公司一般工作流程是,需求方需要改什么需求,增加什么功能,直接找到程序员进行更改

用代码表示这种场景就是

    class demand //需求方
{
//传统方式,需求方直接找程序员改功能
coder code;
public demand(coder code)
{
this.code = code;
}
public void GetCount()
{
code.GetCount();
}
public void GetDataInterface()
{
code.GetDataInterface();
}
}

class coder//程序员
{
public string Name { get; set; }
public void GetCount()
{
Console.WriteLine(
"帮忙统计一个数据的数量");
}
public void GetDataInterface()
{
Console.WriteLine(
"帮忙提供一个数据接口");
}
}

class Client
{
//直接调用
coder code= new coder ();
demand d
= new demand(code);
d.GetCount();
d.GetDataInterface();
}

  

如果我们的程序员不想需求方找到我们,经常打断我们的思路,那就可以考虑用代理模式了,在需求方和程序员之间设置产品,需求方找产品

产品找程序员,然后程序员修改或增加需求功能

先上图:

 需求方先找产品,产品找程序员,产品就相当于代理的角色了

大公司或者说公司有比较规范流程的公司一般都是采用代理模式完成项目的

   public   abstract class Abstactcoder
{
public abstract void GetCount();

public abstract void GetDataInterface();
}

class CoderA : Abstactcoder
{
public override void GetCount()
{
Console.WriteLine(
"代理方式取得数量");
}
public override void GetDataInterface()
{
Console.WriteLine(
"代理方式取得数据接口");
}
}

class Proxy : Abstactcoder
{
/*需求方不能直接找程序员或者UI,如果想找,人家也不理你,必须走产品部门,Proxy在这里的作用就相当于产品部门,
*需求方想改什么东东,必须先找产品部门,产品部门沟通好以后,再找程序员进行具体的工作
*这样避免了需求方直接找到程序员,程序员的工作需要集中精力,思路不能被打断,打断思路需要重启思路,这很糟糕,所以我们需要代理(产品部门)
*/
private Abstactcoder abstactcoder;
public Proxy()
{
abstactcoder
= new CoderA();
}
public override void GetCount()
{
abstactcoder.GetCount();
}
public override void GetDataInterface()
{
abstactcoder.GetDataInterface();
}
}

class Client
{
//代理方式调用程序员
Proxy proxya = new Proxy();
proxya.GetCount();
proxya.GetDataInterface();

Console.Read();
}

代理模式应用场景:
1.安全代理,在代理类里面加一些权限的判断和控制
2.远程代理,.net引用webservice,会生成一些代理文件
3.虚拟代理,提供一个占位符,但是没有直接显示图片,qq图片采用

最后总结一下,代理模式就是找一个人干活,但是并不直接找干活的人,找一个中间人,找干活的人并不关心中间人(代理)去怎么做,只是关心最后活干完就行了!

中间人负责接活,但是并不完成具体的工作任务,他会把找他干活人的任务分配给其他人去完成!

这样看来,代理是个美差,代理自己什么都没干!

posted @ 2011-08-18 14:39  艾伦  阅读(735)  评论(0编辑  收藏  举报