天天看點

23種設計模式之代理模式傻瓜式了解

代理模式

靜态代理

23種設計模式之代理模式傻瓜式了解
23種設計模式之代理模式傻瓜式了解

代碼

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:子產品化分工,銀行機構專門處理貸款相關的實物,房産局

負責資格驗證,中介幫你跑銀行和房産局。也用買房這個接口規定各個機構要處理的問題,用多态,表示大家都在圍繞着買房這件事在做。當然本文的案例沒有涉及到具體驗證過程,比方說滿足某種條件才能貸款,才能買房等等。