代理模式-Proxy

代理模式

人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。
现实生活中,其实操作系统就是软件和硬件之间的代理。

动机

在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。

  • 如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。

    意图

    结构

    Proxy.png

    要点

    为其他对象提供一种代理以控制对这个对象的访问。

    代码示例

  • 外部系统(网络系统)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    interface IEmployee
    {
    decimal GetSalary();
    }
    public class Employee:IEmployee
    {
    public decimal GetSalary()
    {
    //...
    }
    }
  • 代理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class EmployeeProxy:IEmployee
    {
    public EmployeeProxy()
    {
    //SOAP对象创建的封装
    }
    public decimal GetSalary()
    {
    //...SOAP封装,请求网络数据
    //解析网络数据
    //返回C#数据结果
    }
    }
  • Client

    1
    2
    3
    4
    5
    public class HrSys
    {
    IEmployee emp = new EmployeeProxy();
    decimal salary = emp.GetSalary();
    }