赘述:今日所读,代理模式,只是今日所理解,略显稚嫩和浅薄。在博客中记录这些,也不是为了指导谁,只是记录下今日所学,所思,是谓产出。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
从代理模式的定义,不难看出,代理模式是提供了一个代理类,可以控制被代理对象的访问。类似于房产中介中的中介,可以代理卖房人进行买房,决定卖房人的卖房行为。看类图:
可以看出,代理类和被代理对象,都实现了共同的接口,其中代理类中封装了被代理对象的引用,这样就可以在代理类中调用被代理对象的行为。
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(); } } }
以上代码就实现了一个简单的代理模式。所以,代理模式是代理了对象的访问。
代理模式与装饰模式:
看代理模式的类图,会发现,它与装饰模式的类图实现是如此的类似。装饰模式具体实现过程是通过抽像化一个构件对象,来扩展具体的构件对象职能。其中构件对象和抽线装饰角色类都实现了该抽象接口;装饰角色抽象类中包装了一个具体的构件对象,装饰类继承该抽象类,实现自己的装饰职能,同时调用具体构件对象。以上,是装饰模式下,实现扩展构件对象职能的思路说明。抛开其他的不说,这个不就是完全的代理模式吗。
二者的区别就在于,代理模式是代理了对象,控制了对象的访问,而装饰模式只是扩展了对象的职能,并不能影响到对象。
模式的具体区别除了在实现了方式外,最重要的是其设计的目的型。代理模式与装饰模式最根本的区别是其二者目的性不同,不在于具体的实现差异。