使用代理模式来进行C#设计模式开发的基础教程

2019-12-26 18:02:51于丽

在上面所有种类的代理模式中,虚拟代理、远程代理、智能引用代理和保护代理较为常见的代理模式。下面让我们具体看看代理模式的具体定义。

2.1 定义
代理模式——就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用。在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。例如电脑桌面的快捷方式就是一个代理对象,快捷方式是它所引用的程序的一个代理。

2.2 代理模式实现
看完代理模式的描述之后,下面以一个生活中的例子来解释下代理模式,在现实生活中,如果有同事出国或者朋友出国的情况下,我们经常会拖这位朋友帮忙带一些电子产品或化妆品等东西,这个场景中,出国的朋友就是一个代理,他(她)是他(她)朋友的一个代理,由于他朋友不能去国外买东西,他却可以,所以朋友们都托他帮忙带一些东西的。下面就以这个场景来实现下代理模式,具体代码如下:


// 客户端调用
  class Client
  {
    static void Main(string[] args)
    {
      // 创建一个代理对象并发出请求
      Person proxy = new Friend();
      proxy.BuyProduct();
      Console.Read();
    }
  }
  // 抽象主题角色
  public abstract class Person
  {
    public abstract void BuyProduct();
  }
  //真实主题角色
  public class RealBuyPerson : Person
  {
    public override void BuyProduct()
    {
      Console.WriteLine("帮我买一个IPhone和一台苹果电脑");
    }
  }
  // 代理角色
  public class Friend:Person
  {
    // 引用真实主题实例
    RealBuyPerson realSubject;
    public override void BuyProduct()
    {
      Console.WriteLine("通过代理类访问真实实体对象的方法");
      if (realSubject == null)
      {
        realSubject = new RealBuyPerson();
      }
      this.PreBuyProduct();
      // 调用真实主题方法
      realSubject.BuyProduct();
      this.PostBuyProduct();
    }
    // 代理角色执行的一些操作
    public void PreBuyProduct()
    {
      // 可能不知一个朋友叫这位朋友带东西,首先这位出国的朋友要对每一位朋友要带的东西列一个清单等
      Console.WriteLine("我怕弄糊涂了,需要列一张清单,张三:要带相机,李四:要带Iphone...........");
    }
             
    // 买完东西之后,代理角色需要针对每位朋友需要的对买来的东西进行分类
    public void PostBuyProduct()
    {
      Console.WriteLine("终于买完了,现在要对东西分一下,相机是张三的;Iphone是李四的..........");
    }
  }

在上面的代码中都有相应的注释,这里也不多解释了。