From Now On,Let us begin Design Patterns。
代理模式
定義
- 爲其他對象提供一種代理以控制對這個對象的訪問。 Provide asurrogate or placeholder for another object to control access to it.
代理模式也叫做委託模式,它是一項基本設計技巧。許多其它的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式,而且在日常的應用中,代理模式可以提供非常好的訪問控制。下面看一下通用類圖中三個角色的定義:
1. Subject抽象主題角色:
可以是抽象類也可以是接口,是一個最普通的業務類型定義,無特殊要求;
2. RealSubject具體主題角色:
也叫做被委託角色、被代理角色。它纔是業務邏輯的具體執行者;
3. Proxy代理主題角色:
也叫做委託類、代理類。它負責對真實角色的應用,把所有抽象主題類定義的方法限制委託給真實主題角色實現,並且在真實主題角色處理完畢前後做預處理和善後處理工作。
通用類圖:
通用源碼實現如下:
代理模式的優點:
職責清晰:真實的角色就是實現實際的業務邏輯,不用關心其他非本職責的事務,通過後期的代理完成一件事務,附帶的結果就是編程簡潔
高擴展性:具體主題角色是隨時都會發生變化的,只要它實現了接口,不用管它如何變化,都逃不了接口,那我們的代理類完全可以在不做任何修改的情況下使用。
代理模式的缺點:
- 不清楚
代理模式的使用場景:
需要將事務委託其它模塊的情境
需要對另一對象進行訪問控制的情境
代理模式的分類
透明代理:用戶不用知道代理的存在,可以直接訪問目標
普通代理:用戶要先知道代理的存在,才能訪問目標
強制代理:用戶直接調用真實角色,不用關心代理是否存在,但是其代理的產生是由真實角色決定
代理模式的例子:源自head frist of 設計模式
類圖:
買車的行爲接口:
顧客買車的具體行爲:
代理類:4S店銷售員:
買車的場景:
運行結果: