Java中静态代理
最近我一直想搞清楚Java中的代理問題。一直都只是聽說,還沒有真正領教。
于是我就在網上找了一下,說得不是很明白,然后我又在視頻里找了一下,有一個叫兄弟連的視頻給了介紹,雖然那些風格我不是很喜歡,不過也算是說得明明白白。我同學說馬士兵講得不錯,因為看了這個視頻,也就不想再找了。
視頻里是舉了一個形象的例子: 一個妹子請媒婆來給她找一個如意郎君。而這里的媒婆就是我們所說的那個代理類。代理模式是為其它對象提供一種代理以控制對這個對象的訪問。說白了,就是說代理類擋在了被代理類前面為被代理類提供一個篩選的功能。這里的媒婆就是起到了這一層篩選的作用。媒婆可按妹子提供的條件為妹子挑選如意郎君,條件成立后,讓妹子(被代理人)去相親。
如下:
ProxyDemo.java
public class ProxyDemo {public static void main(String[] args) {Person p = new Person("張三");Matchmaker mm = new Matchmaker(p);mm.miai();}
}
Subject.java
public interface Subject {public void miai();
}
Matchmaker.java public class Matchmaker implements Subject{private Subject subject; // 要代理的目標對象private boolean flag; // 是否滿足條件標記public Matchmaker(Subject subject) {this.subject = subject;}public void befor(int condition) {System.out.println("媒人正在為代理人挑選如意郎君 . . .");if(condition >=165 && condition <=180) { // person給出的篩選條件System.out.println("已找到合適的人選");flag = true; // 設置滿足條件標記為真}else{System.out.println("未找到合適的人選");flag = false; // 設置滿足條件標記為真}}public void after() {if(flag) System.out.println("本次相親圓滿結束。");else System.out.println("本次相親未成功。");}@Overridepublic void miai() {befor(170); // 傳一個身高為170cm的參數if(flag) subject.miai();after();} }
Person.java public class Person implements Subject {private String name;public Person(String name) {this.name = name; }@Overridepublic void miai() {System.out.println(name + "正在相親中。。。");}}
這里的代理人和被代理人都得實現相親這個主題的接口,因為代理人和被代理人是因為相親這件事才有代理人與被代理人的這層關系。
Matchmaker.java public class Matchmaker implements Subject{private Subject subject; // 要代理的目標對象private boolean flag; // 是否滿足條件標記public Matchmaker(Subject subject) {this.subject = subject;}public void befor(int condition) {System.out.println("媒人正在為代理人挑選如意郎君 . . .");if(condition >=165 && condition <=180) { // person給出的篩選條件System.out.println("已找到合適的人選");flag = true; // 設置滿足條件標記為真}else{System.out.println("未找到合適的人選");flag = false; // 設置滿足條件標記為真}}public void after() {if(flag) System.out.println("本次相親圓滿結束。");else System.out.println("本次相親未成功。");}@Overridepublic void miai() {befor(170); // 傳一個身高為170cm的參數if(flag) subject.miai();after();} }
Person.java public class Person implements Subject {private String name;public Person(String name) {this.name = name; }@Overridepublic void miai() {System.out.println(name + "正在相親中。。。");}}
這里的代理人和被代理人都得實現相親這個主題的接口,因為代理人和被代理人是因為相親這件事才有代理人與被代理人的這層關系。
總結
- 上一篇: C语言实例第6期:反转字符串
- 下一篇: Android开启adb