靜態代理模式
阿新 • • 發佈:2020-09-09
代理模式三要素
- 共同的介面
- 被代理的真實角色
- 代理角色
比如老王被綠了,要離婚,他找了一個代理律師幫他打官司
那麼老王和律師的共同目的就是老王離婚,離婚可以抽象成一個共同的介面
老王要打官司離婚,所以老王是被代理的真實角色
代理律師是幫老王離婚,代理律師是一個代理角色
首先定義一個介面
// 定義一個離婚介面
public interface Divorce {
// 定義一個打官司的方法,通過打官司的方式離婚
void lawsuit();
}
定義一個真實角色類
// 定義一個真是角色,男人類,實現離婚介面 public class Man implements Divorce { private String name; // 這個人有姓名 public Man(String name) { this.name = name; System.out.println("有一個人叫" + this.name + "!"); } public String getName() { return name; } @Override public void lawsuit() { System.out.println(this.name + "打贏官司離婚了!"); } }
定義一個代理角色類
// 定義一個代理角色,律師類,實現離婚介面 public class Lawyer implements Divorce { private Man man; // 律師要知道幫誰離婚 public Lawyer(Man man) { this.man = man; System.out.println(this.man.getName() + "找到了律師!"); } // 律師可以打離婚官司,但是律師是幫別人打離婚官司 @Override public void lawsuit() { // 律師打官司前要蒐集證據 this.before(); // 律師幫老王離婚 this.man.lawsuit(); // 律師打官司後要收錢 this.after(); } // 律師打官司前要蒐集證據 private void before() { System.out.println("律師打官司前蒐集證據!"); } // 律師打官司後要收錢 private void after() { System.out.println("律師打官司後收錢!"); } }
測試程式碼
// 測試程式碼
public static void main(String[] args) {
// 建立一個真實物件老王
Man wang = new Man("老王");
// 老王找了一個律師
Lawyer lawyer = new Lawyer(wang);
// 律師幫老王打官司
lawyer.lawsuit();
}
執行結果
有一個人叫老王!
老王找到了律師!
律師打官司前蒐集證據!
老王打贏官司離婚了!
律師打官司後收錢!
代理模式可以在執行業務程式碼前後進行一些其他的操作