设计模式学习之代理模式

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

类图:


Subject类:定义了RealSubject和Proxy的共用接口,这样就在任何RealSubject的地方都可以使用Proxy。

RealSubject类:定义了Proxy所代表的真实实体。

Proxy类:保存一个引用是的代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。

Subject.cs

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

namespace ConsoleApplication1
{
    public abstract class Subject
    {
        public abstract void Request();
    }
}
RealSubject.cs

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

namespace ConsoleApplication1
{
    public class RealSubject:Subject
    {
        public override void Request()
        {
            //throw new NotImplementedException();
            Console.WriteLine("我是真的请求啊!");
        }
    }
}
Proxy.cs

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

namespace ConsoleApplication1
{
    public class Proxy:Subject
    {
        RealSubject realSubject;
        public override void Request()
        {
            //throw new NotImplementedException();
            if (this.realSubject == null)
            {
                realSubject = new RealSubject();
            }
            Console.WriteLine("我是代理请求,下面运行真的请求!");
            realSubject.Request();
        }
    }
}
调用:

                  #region 代理模式
            Proxy proxy = new Proxy();
            proxy.Request();

            Console.ReadLine();
            #endregion

运用范围:

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

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

3.安全代理,用来控制真实对象访问时的权限。

4.智能指引,当调用真实的对象时,代理吃力另一些事。

其实,代理就是真实对象的代表。





猜你喜欢

转载自blog.csdn.net/chenpeggy/article/details/21995775
今日推荐