代理模式
人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。
现实生活中,其实操作系统就是软件和硬件之间的代理。
动机
在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。
- 如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。
意图
结构

要点
为其他对象提供一种代理以控制对这个对象的访问。代码示例
外部系统(网络系统)
123456789101112interface IEmployee{decimal GetSalary();}public class Employee:IEmployee{public decimal GetSalary(){//...}}代理
1234567891011121314public class EmployeeProxy:IEmployee{public EmployeeProxy(){//SOAP对象创建的封装}public decimal GetSalary(){//...SOAP封装,请求网络数据//解析网络数据//返回C#数据结果}}Client
12345public class HrSys{IEmployee emp = new EmployeeProxy();decimal salary = emp.GetSalary();}