代理模式

赘述:今日所读,代理模式,只是今日所理解,略显稚嫩和浅薄。在博客中记录这些,也不是为了指导谁,只是记录下今日所学,所思,是谓产出。

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

从代理模式的定义,不难看出,代理模式是提供了一个代理类,可以控制被代理对象的访问。类似于房产中介中的中介,可以代理卖房人进行买房,决定卖房人的卖房行为。看类图:

 

 

 可以看出,代理类和被代理对象,都实现了共同的接口,其中代理类中封装了被代理对象的引用,这样就可以在代理类中调用被代理对象的行为。

1.公用接口:

namespace 代理模式.model
{
    public interface ISubject
    {
        void Request();
    }
}

2.被代理对象实现公用接口:

namespace 代理模式.model
{
   public class Subject:ISubject
    {
        public void Request() 
        {
            Console.WriteLine("真实请求");
        }
    }
}

3.代理类实现公用接口,并包装了被代理对象的引用:

namespace 代理模式.model
{
    public class Proxy:ISubject
    {
        private Subject realSubject;

        public void Request() 
        {
            if (realSubject== null)
                realSubject=new Subject();
            realSubject.Request();
        }
    }
}

以上代码就实现了一个简单的代理模式。所以,代理模式是代理了对象的访问。

代理模式与装饰模式:

  看代理模式的类图,会发现,它与装饰模式的类图实现是如此的类似。装饰模式具体实现过程是通过抽像化一个构件对象,来扩展具体的构件对象职能。其中构件对象和抽线装饰角色类都实现了该抽象接口;装饰角色抽象类中包装了一个具体的构件对象,装饰类继承该抽象类,实现自己的装饰职能,同时调用具体构件对象。以上,是装饰模式下,实现扩展构件对象职能的思路说明。抛开其他的不说,这个不就是完全的代理模式吗。

  二者的区别就在于,代理模式是代理了对象,控制了对象的访问,而装饰模式只是扩展了对象的职能,并不能影响到对象。

模式的具体区别除了在实现了方式外,最重要的是其设计的目的型。代理模式与装饰模式最根本的区别是其二者目的性不同,不在于具体的实现差异。

posted @ 2020-07-12 23:22  一生安然  阅读(164)  评论(0编辑  收藏  举报