1. 程式人生 > >淺談自己對Java代理模式的理解--即為什麼要用&怎麼用

淺談自己對Java代理模式的理解--即為什麼要用&怎麼用

                首先,國際慣例,上Java代理模式的定義:

                       Java代理模式:對其他物件提供一種代理以控制對這個物件的訪問。

定義很簡單,就一句話,怎麼去理解,不急,先聽一個小故事:

              故事角色:小明(從小鬥智鬥勇,多次死裡逃生,逼格高),小王(還未成長為隔壁老王的四好青年)

              一日,公司boss讓小明寫一個登陸程式,並打印出登陸用名,小明面帶詭異的微笑,“啪啪”敲出程式碼:

//先寫個介面吧
public interface LoginInterface {
       void print();
}
         
//實現登陸程式列印
public class LoginPrint implements LoginInterface {
    @Override
    public void print() {
    	System.out.println("小明!");
    }
}
           小明將所寫程式碼提交給boss,翌日小明被boss打死(BOSS:尼瑪,登陸驗證都沒有哦),boss又叫小王繼續完成這個登陸程式,加上登陸驗證,但不準改動小明所寫的原始碼(BOSS:哼,這小王最近跟我小姨子走的太近了!!!)。

           小王看完小明所寫的程式碼,直呼“WTF!!!”,BOSS又不讓改動原始碼,“哈哈,不過山人自有妙計。嘿嘿!!!

看來下次要搬到BOSS隔壁去啊!!!”

           幾日後,小王憑藉超人的智慧及無可阻擋的魅力,在BOSS的小別墅裡完成了程式碼:

public class ProxyClass  implements LoginInterface {
	
	private LoginInterface proxyInterface;
	
	public ProxyClass(LoginInterface proxyInterface){
		this.proxyInterface=proxyInterface;
	}
	//登陸驗證
	public void loginCheck(String username,String password){
		if(username.equals("xiaoming")&&password.equals("123456")){
			System.out.println("驗證通過!");
			print();			
		}else{
			System.out.println("驗證未通過!");
		}
	}
	
    @Override
    public void print() {
    	proxyInterface.print();
    	
    }
}
             次日,提交BOSS,BOSS滿懷心事的驗證小王的程式碼:
public class Test {

	public static void main(String[] args) {
       LoginPrint realClass=new LoginPrint();
       ProxyClass proxyClass=new ProxyClass(realClass);
       proxyClass.loginCheck("xiaoming","123456");
	}
}

          面對以下的結果,boss無奈長嘆一聲!

          
           故事結束,這個故事簡潔明瞭的說出了代理的作用,及為什麼要用代理:老闆不讓小王更改小明所寫的登陸類LoginPrint。小王採取的方法就是採用代理模式寫出了登陸驗證ProxyClass,完成任務。