Proxy pattern

至少在以下集中情况下可以用 Proxy模式解决问题:

1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理

去完成,GoF 称之为虚代理(Virtual Proxy);

2)为网络上的对象创建一个局部的本 比如要操作一个网络上的一个对象(网

络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成,GoF

之为远程代理(Remote Proxy);

3)对对象进行控制访问的时候,比如在 Jive 论坛中不同权限的用户(如管理员、普通

用户等)将获得不同层次的操作权限,我们将这个工作交给一个代理去完成,GoF 称之为保

护代理(Protection Proxy)。

4)智能指针(Smart Pointer),关于这个方面的内容,建议参看 Andrew Koenig 的《C++沉思录》中的第 5 章。

 

This real-world code demonstrates the Proxy pattern for a Math object represented by a MathProxy object.

// Proxy pattern -- Real World example


using System;

namespace DoFactory.GangOfFour.Proxy.RealWorld
{
  
  // Mainapp test application

  class MainApp
  {
    static void Main ()
    {
      // Create math proxy
      MathProxy p = new MathProxy();

      // Do the math
      Console.WriteLine("4 + 2 = " + p.Add(4, 2));
      Console.WriteLine("4 - 2 = " + p.Sub(4, 2));
      Console.WriteLine("4 * 2 = " + p.Mul(4, 2));
      Console.WriteLine("4 / 2 = " + p.Div(4, 2));

      // Wait for user
      Console.Read();
    }
  }

  // "Subject"

  public interface IMath
  {
    double Add(double x, double y);
    double Sub(double x, double y);
    double Mul(double x, double y);
    double Div(double x, double y);
  }

  // "RealSubject"

  class Math : IMath
  {
    public double Add(double x, double y){return x + y;}
    public double Sub(double x, double y){return x - y;}
    public double Mul(double x, double y){return x * y;}
    public double Div(double x, double y){return x / y;}
  }

  // "Proxy Object"

  class MathProxy : IMath
  {
    Math math;

    public MathProxy()
    {
      math = new Math();
    }

    public double Add(double x, double y)
    {
      return math.Add(x,y);
    }
    public double Sub(double x, double y)
    {
      return math.Sub(x,y);
    }
    public double Mul(double x, double y)
    {
      return math.Mul(x,y);
    }
    public double Div(double x, double y)
    {
      return math.Div(x,y);
    }
  }
}


Output

4 + 2 = 6
4 - 2 = 2
4 * 2 = 8
4 / 2 = 2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值