代理模式
靜态代理
代碼
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:子產品化分工,銀行機構專門處理貸款相關的實物,房産局
負責資格驗證,中介幫你跑銀行和房産局。也用買房這個接口規定各個機構要處理的問題,用多态,表示大家都在圍繞着買房這件事在做。當然本文的案例沒有涉及到具體驗證過程,比方說滿足某種條件才能貸款,才能買房等等。