深圳建网建网站,中国山东建设监理协会网站,wordpress站点相关,运营网站团队建设前言 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时#xff0c;访问对象不适合或者不能直接 引用目标对象#xff0c;代理对象作为访问对象和目标对象之间的中介。在学习代理模式的时候#xff0c;可以去了解一下Aop切面编程AOP切面编程_aop编程…前言 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时访问对象不适合或者不能直接 引用目标对象代理对象作为访问对象和目标对象之间的中介。在学习代理模式的时候可以去了解一下Aop切面编程AOP切面编程_aop编程_爱吃香蕉的阿豪的博客-CSDN博客Aop底层实现通常使用代理模式
代理Proxy模式分为三种角色
抽象角色Subject类 通过接口或抽象类声明真实角色和代理对象实现的业务方法。真实角色Real Subject类 实现了抽象角色中的具体业务是代理对象所代表的真实对 象是最终要引用的对象。代理Proxy类 提供了与真实角色相同的接口其内部含有对真实角色的引用它可以访 问、控制或扩展真实角色的功能。
举例
我们假设一种场景电脑中有一个计算方法传两个数字进去得出一个合计但是现在需要添加一个整数计算器要把传进去的小数去除小数部分只计算整数部分但是原来的sum方法可能在其他地方还需要使用因此不能修改原来的方法我们使用代理模式来实现这一功能。
抽象角色
创建一个抽象角色计算机里面有一个计算方法
public interface IComputer
{void calculator(double a, double b);
}
真实角色
实现类sum对传进来的两个数进行相加
public class sum : IComputer
{public void calculator(double a, double b){Console.WriteLine(a b);}
}
代理类 ProxySum
在代理类中直接引用了真实角色sum不过在这之前先对参数进行了去小数处理
public class ProxySum : IComputer
{private sum sum new sum();public void calculator(double a, double b){a Math.Floor(a);b Math.Floor(b);sum.calculator(a, b);}
}
测试
先使用原来的真实角色sum传入两个小数 public static void Main(string[] args){var sum new sum();sum.calculator(1.111,3.999);}
得到结果5.11 然后我们再使用代理类proxySum public static void Main(string[] args){var proxySum new ProxySum();proxySum.calculator(1.111,3.999);} 得到的结果是去除小数后相加的结果 总结
优点
代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
代理对象可以扩展目标对象的功能 代理模式能将客户端与目标对象分离在一定程度上降低了系统的耦合度
缺点 增加了系统的复杂度