設計模式 靜態代理模式
阿新 • • 發佈:2021-10-31
1 靜態代理模式
1.1 定義
簡單來說就是建立一個代理物件(Proxy),只有代理物件能呼叫目標物件(RealSubject),同時Proxy也實現了目標物件RealSubject的介面(Subject),這就能實現多型。
代理模式的核心是,客戶端(Client)要想訪問目標物件(RealSubject)的方法時,只能通過代理物件(Proxy)實現。
可以看到代理物件相比目標物件還多了preRequest和afterRequest,這些自定義的方法就能實現對目標物件的方法的增強,這也是springAOP的原理
1.2 手動實現
為了方便學習,程式碼都寫在一個檔案下
public class ProxyPattern { public static void main(String[] args) { //例項化目標物件 RealSubject realSubject = new RealSubject(); //例項化代理物件 RealSubjectProxy realSubjectProxy = new RealSubjectProxy(realSubject); //使用代理物件的方法 realSubjectProxy.doWork(); } } /** * 統一介面 */ interface Subject{ void doWork(); } /** * 目標物件 */ class RealSubject implements Subject{ @Override public void doWork() { System.out.println("做了某件事"); } } /** * 代理物件 */ class RealSubjectProxy implements Subject{ private RealSubject subject; public RealSubjectProxy(RealSubject subject){ this.subject = subject; } /** * 自定義方法1 */ public void connection(){ System.out.println("建立連線"); } /** * 自定義方法2 */ public void log(){ System.out.println("日誌記錄"); } /** * 對目標物件的方法進行增強 */ @Override public void doWork() { connection(); subject.doWork(); log(); } }
5.3 和裝飾器模式的區別
代理模式強調代理類對真正辦事兒的類的許可權控制能力,裝飾器強調對舊物件而不是舊類的功能擴充套件