博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话设计模式读书笔记6——代理模式
阅读量:7185 次
发布时间:2019-06-29

本文共 2657 字,大约阅读时间需要 8 分钟。

代理模式:

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

UML结构如下图:

代码实现:

//定义一个Subject 抽象类    public abstract class Subject    {        public abstract void Request();    }    //定义一个RealSubject类,继承Subject    public class RealSubject : Subject    {        public override void Request()        {            Console.WriteLine("Called RealSubject.Request()");        }    }    //定义一个代理Prxoy类,继承Subject    public class Proxy : Subject    {        private RealSubject realSubject;        public override void Request()        {            if (realSubject == null)            {                realSubject = new RealSubject();            }            realSubject.Request();        }    }    class Program    {        static void Main(string[] args)        {            //实例化代理类            Proxy proxy = new Proxy();            //通过代理类来访问请求            proxy.Request();            Console.ReadKey();        }    }

 实例代码:

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);    }    public 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; }    }    public class MathProxy : IMath    {        private Math _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);        }    }    class Program    {        static void Main(string[] args)        {            //创建一个计算代理            MathProxy proxy = new MathProxy();                       Console.WriteLine("4 + 2 = " + proxy.Add(4, 2));            Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2));            Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2));            Console.WriteLine("4 / 2 = " + proxy.Div(4, 2));                  Console.ReadKey();        }    }

 运行结果:

代理模式应用

1、远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。如 WebService,WCF 在.net 中的调用。

2、虚拟代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。如浏览一个复杂html页面,有很多图片和文字,但还是可以很快打开,可以看到所有的文字,此时看到的图片却是一张一张下载后才能看到,浏览器就是利用代理模式来优化下载的。

3、安全代理:用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限。

4、智能指引:是指当调用真实的对象时,代理处理另外一些事。比如将对此对象调用的次数记录下来。

转载于:https://www.cnblogs.com/lxblog/p/4112595.html

你可能感兴趣的文章
我在csdn有一个新家啦
查看>>
LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
查看>>
【Python学习笔记】-冒泡排序、插入排序、二分法查找
查看>>
linux进程管理之进程创建(三)
查看>>
DS第五章学习小结
查看>>
IT的开始之路——微信小程序(3)
查看>>
Binary Postorder Traversal
查看>>
Backpack III 完全背包
查看>>
Android快捷键
查看>>
对象进阶
查看>>
闹心的CSDN
查看>>
java基础---面向对象
查看>>
51nod - 1022【四边形不等式优化DP】
查看>>
3月3日(6) Climbing Stairs
查看>>
STL学习笔记-- list
查看>>
mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
查看>>
实验三+108+曾宏宇
查看>>
[USACO5.4]奶牛的电信Telecowmunication 最小割
查看>>
状态模式
查看>>
解决iphone横屏时字体变大问题或者内容大小不一样等...
查看>>