代理模式
基本概念
代理模式就是找一个代理类替原对象进行一些操作。与装饰器模式不同,装饰器模式是在原有对象的基础上增加一些功能,代理模式则是全部替代、全权代表(租房子时的中介、打官司时的律师)。
类图
这里 类图与装饰器模式不一样的地方在右侧,装饰器里的是Decorator,现在是Proxy,没错 装饰器是装饰器,代理是代理,老废话了。还是通过代码来看具体那里不一样吧。
Sourceable和Source的代码与装饰器的一样,这里就不在写了(需要的话请转到查看“设计模式学习—Java装饰器模式”),这里我们主要看一下Decorator与Proxy的区别。
Proxy
/**
* 代理模式
*/
public class Proxy implements Sourceable {
private Source source;
public Proxy(){
source = new Source(); // 全权代理
}
@Override
public void method() {
source.method();
System.out.println("与装饰器模式的不同就在这里");
}
}
Decorator
/**
* 装饰器模式
*/
public class Decorator implements Sourceable{
private Sourceable source;
public Decorator(Sourceable source){
this.source = source; // 合成复用原则
}
@Override
public void method() {
source.method(); // 保证原有功能不变
System.out.println("化妆更是锦上添花!!"); // 增加新的功能
}
}
两者的区别
装饰器模式通常的做法是将原始对象作为一个参数传给装饰者的构造器,而代理模式通常在一个代 理类中创建(new)一个被代理类的对象。
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问(全权代理,Source对象可以不用出面)。
代理模式的优缺点
优点:
- 代理模式将代理对象与真是被调用目标对象分离。
- 在一定程度上降低了系统的耦合性。
- 扩展性好。 可以起到保护目标对象的作用。
- 可以增强目标对象的功能。
缺点:
- 代理模式会造成系统设计中类的数量增加。
- 在客户端和目标对象中增加一个代理对象,会导致请求处理速度变慢。
- 增加了系统的复杂度。
代理模式的实际意义
1、如果在使用的时候需要对原有的方法进行改进,可以采用一个代理类调用原有方法,并且对产生的
结果进行控制,这种方式就是代理模式。
2、使用代理模式,可以将功能划分的更加清晰,有助于后期维护。
本文章只是个人学习,内容不多,也都很基础,如果内容上有什么问题,还请大家多多指教!!
一定会有那么一天,我也能用上这句话:“本性闲散,最终却也跟上了前辈的步伐”