1. 程式人生 > 其它 >Python入門練習題

Python入門練習題

代理模式簡介

定義:是一種結構型模式,需要給某物件提供一個代理以控制對該物件的訪問,但是訪問物件不適合或者不能直接引用目標物件,代理物件作為訪問物件和目標物件之間的中介

目的:其他物件提供一種代理以控制對這個物件的訪問,當無法或不想直接引用某個物件或訪問某個物件存在困難時,可以通過代理物件來間接訪問。使用代理模式主要有兩個目的:一是保護目標物件,二是增強目標物件

優點:

代理模式在客戶端與目標物件之間起到一箇中介作用和保護目標物件的作用

代理物件可以擴充套件目標物件的功能

代理模式能將客戶端與目標物件分離,在一定程度上降低了系統的耦合度,增加了程式的可擴充套件性

缺點:

代理模式會造成系統設計中類的數量增加

在客戶端和目標物件之間增加一個代理物件,會造成請求處理速度變慢

增加了系統的複雜度

實現

角色:

抽象主題(Subject)類:通過介面或抽象類宣告真實主題和代理物件實現的業務方法

真實主題(Real Subject)類:實現了抽象主題中的具體業務,是代理物件所代表的真實物件,是最終要引用的物件

代理(Proxy)類:提供了與真實主題相同的介面,其內部含有對真實主題的引用,它可以訪問、控制或擴充套件真實主題的功能

程式碼:

 1 /**抽象主題**/
 2 public interface Subject {
 3     public void request();
 4 
 5 }
 6 
 7
/**真實主題**/ 8 public class RealSubject implements Subject{ 9 10 public void request() { 11 // TODO Auto-generated method stub 12 System.out.println("我是真實主題"); 13 } 14 15 } 16 17 /**代理主題**/ 18 public class ProxySubject implements Subject{ 19 private RealSubject realSubject;
20 21 public void request() { 22 if (realSubject == null) { 23 realSubject = new RealSubject(); 24 } 25 preRequest(); 26 realSubject.request(); 27 postRequest(); 28 } 29 30 public void preRequest() { 31 System.out.println("訪問真實主題之前的預處理"); 32 } 33 34 public void postRequest() { 35 System.out.println("訪問真實主題之後的後續處理"); 36 } 37 } 38 39 /**測試方法**/ 40 public class App { 41 public static void main( String[] args ){ 42 ProxySubject proxySubject = new ProxySubject(); 43 proxySubject.request(); 44 } 45 } 46 47 測試結果: 48 訪問真實主題之前的預處理 49 我是真實主題 50 訪問真實主題之後的後續處理