淺談自己對Java代理模式的理解--即為什麼要用&怎麼用
阿新 • • 發佈:2018-12-23
首先,國際慣例,上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的小別墅裡完成了程式碼:
次日,提交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(); } }
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,完成任務。