程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 代理模式(Proxy) 之c#

代理模式(Proxy) 之c#

編輯: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
{
           //代理方式調用程序員www.2cto.com
        Proxy proxya = new Proxy();
            proxya.GetCount();
            proxya.GetDataInterface();

            Console.Read();
}

代理模式應用場景:
1.安全代理,在代理類裡面加一些權限的判斷和控制
2.遠程代理,.net引用webservice,會生成一些代理文件
3.虛擬代理,提供一個占位符,但是沒有直接顯示圖片,qq圖片采用
最後總結一下,代理模式就是找一個人干活,但是並不直接找干活的人,找一個中間人,找干活的人並不關心中間人(代理)去怎麼做,只是關心最後活干完就行了!
中間人負責接活,但是並不完成具體的工作任務,他會把找他干活人的任務分配給其他人去完成!
這樣看來,代理是個美差,代理自己什麼都沒干!

 

摘自 艾倫

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved