静态代理
静态代理的基本介绍
为一个对象提供一个替身 以控制对这个对象的访问 即通过代理对象访问目标对象 这样做的好处是在目标对象实现的基础上 扩展目标对象的功能
大致流程
静态代理的大致流程
- 定义一个接口
- 目标对象实现该接口
- 代理对象也实现该接口
- 调用的时候使用代理对象的方法来调用目标对象
我们来看一个具体案例
接口
package com.zyk;
public interface Rent {
void rent();
}
目标对象 房东
package com.zyk;
public class Host implements Rent {
@Override
public void rent() {
System.out.println("房东出租房子");
}
}
代理对象
package com.zyk;
public class Proxy implements Rent {
Rent rent;//拿被代理的对象进行实例化
public Proxy(Rent rent) {
this.rent=rent;
}
@Override
public void rent() {
seeHouse();
rent.rent();
sign();
}
//代理对象做的一些功能的扩展
public void seeHouse(){
System.out.println("看房");
}
public void sign(){
System.out.println("签合同");
}
}
客户 我
package com.zyk;
public class Client {
public static void main(String[] args) {
//创建目标对象(被代理的对象)
Host host=new Host();
//创建代理对象 把被代理对象传给代理对象
Proxy proxy=new Proxy(host);
//通过代理对象 调用被代理对象的方法
proxy.rent();
}
}
分析
优点
通过代理对象对目标功能进行扩展
缺点
一旦增加方法 代理对象和目标对象都需要被维护