代理模式
代理模式在java中是一种比较常见的设计模式。设计目的是在服务类与客户类之间插入其他功能,插入的功能对于调用者是透明的,起到伪装控制的作用。
静态代理
某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。代理类和委托类有公共的父类或父接口,这样在使用委托类对象的地方都可以用代理对象代替。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求的后续操作。
- 代理的三要素:
- 有共同的行为(租房)- 接口
- 目标角色(租客)- 实现行为
- 代理角色(中介)- 实现行为 增强目标对象行为
- 特点:
- 目标角色固定
- 在应用程序执行前就得到目标角色
- 代理对象会增强目标对象的行为
- 有可能存在多个代理,引起类爆炸(缺点)
- 代理类的实现
共同行为:租房(接口)
//定义接口
public interface RentHouse {
//定义行为
public void toRentHouse();
}
目标角色:租客(接口实现)
//目标对象,实现行为
public class ZuKe implements RentHouse{
@Override
public void toRentHouse() {
System.out.println("我要租房,预算5000");
}
}
代理角色:中介(接口实现)
//代理对象:1.实现行为;2.增强目标对象的行为
public class ZhongJieProxy implements RentHouse{
private RentHouse rentHouse;
public ZhongJieProxy(RentHouse rentHouse) {
this.rentHouse = rentHouse;
}
@Override
public void toRentHouse() {、
//增强实现
System.out.println("寻找房源。。。。");
//接口实现
rentHouse.toRentHouse();
//增强实现
System.out.println("准备合同。。。。");
}
}
测试
public class App {
public static void main( String[] args ) {
//目标对象
RentHouse rentHouse = new ZuKe();
//代理对象(传递目标对象)
ZhongJieProxy zhongJieProxy = new ZhongJieProxy(rentHouse);
//通过调用代理对象中的方法,执行目标对象的行为
zhongJieProxy.toRentHouse();
}
}
结果
"C:\Program Files\Java\jdk1.8.0_291\bin\java.exe"
寻找房源。。。。
我要租房,预算5000
准备合同。。。。
Disconnected from the target VM, address: '127.0.0.1:63985', transport: 'socket'
Process finished with exit code 0
网友评论