文章場景取自日常工作中,先大概描述一下,小公司一般工作流程是,需求方需要改什麼需求,增加什麼功能,直接找到程序員進行更改
用代碼表示這種場景就是
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
{
//代理方式調用程序員www.2cto.com
Proxy proxya = new Proxy();
proxya.GetCount();
proxya.GetDataInterface();
Console.Read();
}
代理模式應用場景:
1.安全代理,在代理類裡面加一些權限的判斷和控制
2.遠程代理,.net引用webservice,會生成一些代理文件
3.虛擬代理,提供一個占位符,但是沒有直接顯示圖片,qq圖片采用
最後總結一下,代理模式就是找一個人干活,但是並不直接找干活的人,找一個中間人,找干活的人並不關心中間人(代理)去怎麼做,只是關心最後活干完就行了!
中間人負責接活,但是並不完成具體的工作任務,他會把找他干活人的任務分配給其他人去完成!
這樣看來,代理是個美差,代理自己什麼都沒干!
摘自 艾倫