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

使用场合:

(1)远程代理,为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实

.NET中在应用程序项目中加入一个web引用,引用一个WebService此时会在项目中产生一个WebReference的文件夹和一些文件,就是代理

(2)虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象

可以达到性能的优化,打开一个html,图片是一张一张加载的,未打开的图片,代理存储了真实图片的尺寸和路径

(3)安全代理:用来控制真实对象访问时的权限

(4)智能指针,是指当调用真实对象时,代理处理另外一些事情

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 代理模式
{
    class Program
    {
        abstract class Subject
        {
            public abstract void Request();
        }
        class RealSubject:Subject
        {
            public override void Request()
            {
                Console.WriteLine("real request");
            }
        }
        class Proxy:Subject
        {
            RealSubject realSubject;
            public override void Request()
            {
                if (realSubject == null)
                    realSubject = new RealSubject();
                realSubject.Request();
            }
        }
        static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.Request();
            Console.Read();
        }
    }
}