代理模式
静态代理
代码
package 静态代理模式;
//设计一个接口,表明大家都在围绕着这个事在转
//规定一个方法,大家都要干的事
interface 买房 {
void buyHosue();
}
//确定被代理的对象,以及要干什么事
class 老王 implements 买房 {
@Override
public void buyHosue() {
System.out.println("我要买房");
}
}
//创建一级代理,负责查看是否有买房资格
class 房产局 implements 买房 {
private 买房 buyHouse;
public 房产局 ( 买房 buyHouse) {
this.buyHouse = buyHouse;
}
@Override
public void buyHosue() {
buyHouse.buyHosue();//老王要干啥?
System.out.println("验资,是否有购房资格");
}
}
//创建一级代理,负责查看是否有贷款能力
class 银行 implements 买房 {
private 买房 buyHouse;
public 银行 ( 买房 buyHouse) {
this.buyHouse = buyHouse;
}
@Override
public void buyHosue() {
buyHouse.buyHosue();//老王要干啥?
System.out.println("查银行流水");
}
}
//创建二级代理,不仅跑房产局查购房资格,跑银行查贷款能力
//还带你看房。
class 中介 implements 买房{
private 买房 银行;
private 买房 房产局;
public 中介 (买房 银行, 买房 房产局) {
this.银行 = 银行;
this.房产局 = 房产局;
}
@Override
public void buyHosue() {
房产局.buyHosue();
银行.buyHosue();
System.out.println("看房,买房");
}
}
public class 静态代理测试 {
public static void main(String[] args) {
// 找一个中介帮老王买房,中介在找房产局和银行验资
买房 buyHouse = new 中介(new 房产局(new 老王()),new 银行(new 老王()));
buyHouse.buyHosue();//中介全权处理
}
}
问题1:老王为什么不直接买房,还要用代理?
答1:模块化分工,银行机构专门处理贷款相关的实物,房产局
负责资格验证,中介帮你跑银行和房产局。也用买房这个接口规定各个机构要处理的问题,用多态,表示大家都在围绕着买房这件事在做。当然本文的案例没有涉及到具体验证过程,比方说满足某种条件才能贷款,才能买房等等。