之后的几章节内容将会讲述结构型模式,结构型模式描述了如何将类或对象按照某种布局组成更大的结构,采用【继承】方式或者 【组合/聚合】的方式均可实现。
由于采用【组合/聚合】的方式实现效果的耦合度低,具备更强的灵活性,满足“合成复用法则”,所以是比较推荐用于实现结构型模式的一种实现方式。
代理(proxy)模式,为对象提供一种控制对象的方法,即代理,通过代理可以间接访问对象,从而进行限制,增强或修改对象的一些特性。
优点:
- 可以在目标对象和客户端之间起到一个中介作用和保护目标对象的作用
- 代理对象可以扩展目标对象的功能
- 一定程度上降低系统耦合
缺点:
- 容易造成系统设计中类数量增多
- 目标类和客户端类之间存在代理类,可能造成请求处理速度变慢
- 增加系统的复杂性
代理模式结构:
- 抽象类:通过接口或抽象类声明抽象业务方法
- 目标对象:实现抽象类,完成业务方法
- 代理类:实现抽象类,内部含有对目标对象的引用,可以扩展,访问和控制目标对象
示例:
public class ProxyDemo {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.request();
}
// 抽象类
interface Subject{
void request();
}
// 目标对象
static class Target implements Subject{
@Override
public void request() {
System.out.println("目标对象");
}
}
// 代理类
static class Proxy implements Subject{
Target target;
@Override
public void request() {
if (target == null){
target = new Target();
}
this.pre();
target.request();
this.post();
}
// 增强方法
private void pre(){
System.out.println("前置增强~");
}
private void post(){
System.out.println("后置处理~");
}
}
}