文章轉至: cainrun.github.io/14718583940…html
上次咱們知道了
單例模式
是怎麼回事, 如今咱們來探討一下什麼叫作代理模式
.git其實所謂的代理模式在咱們平常生活中很是的常見, 好比買車, 各式各樣的牌子都有, 但這些汽車生產商又不可能本身掏錢在每一個城市的每一個角落都開一家本身的直營店, 因此他們會去招一些第三方的代理商進行分銷, 而這個就是咱們今天所要說的
代理模式
.github最後: 若是你有更好的建議或者對這篇文章有不滿的地方, 請聯繫我, 我會參考大家的意見再進行修改, 聯繫我時, 請備註
代理模式
, 若是以爲好的話, 但願你們也能夠打賞一下~嘻嘻~祝你們學習愉快~謝謝~學習
這是一張
代理模式
的UML圖, 一樣也很簡單的講解了代理模式
究竟是怎麼回事ui順序以下: spa
- 1.
Client(客戶)
向Subject(代理店)
發起購買汽車的請求- 2.
Subject(代理店)
會向Proxy(生產商)
進行提單- 3.
Proxy(生產商)
按照提單進行交貨給Subject(代理店)
- 4.
Subject(代理點)
再交付給Client(客戶)
,
打開咱們本身建立的
DesignPatternWork
文件夾, 裏面有咱們以前所建立的DesignPatternWorkSpace
代理
添加咱們所要建立的新工程, 命名爲
ProxyPattern
code
這裏咱們就拿奧迪這個汽車生產商來進行演示, 原諒我是個奧迪控~~htm
在這裏聲明兩個代理方法, 但他們有所區別, 一個是必須實現, 一個是可選類型的, 因爲方法名自注釋, 我這裏就不添加註釋了.對象
@required
- (void)audiManufacturer:(AudiManufacturer *)audiManufacturer
orderQuantity:(NSInteger)orderQuantity;複製代碼
@optional
- (void)audiManufacturer:(AudiManufacturer *)audiManufacturer
audiDelegateInfo:(NSString *)audiDelegateInfo;複製代碼
解釋一下, 爲何咱們須要在代理方法中提供代理類, 其實這個很好理解, 打個比方, 就拿奧迪來講吧, 一個品牌的車子, 確定有不一樣的型號, 而每一個型號不必定都是在同一家工廠裏生產的, 這個時候咱們就須要區分生產地, 因此咱們爲了提供外部去區分, 就須要在代理方法中提供代理類
(我的理解, 不是官方語言哈)
.
在內部實現兩個對方開放的方法
- (void)buyCarCount:(NSInteger)count;
- (void)buyCarModel:(NSString *)model;複製代碼
代理類以及代理方法咱們已經完成了, 接下來咱們就要在外部去實現了
到這裏, 咱們已經完成了整個代理模式的全部要求了, 但還有一些小細節須要提提.
代理職能:
下降對象與對象之間的耦合度協議職能:
主要是用來約束對象或篩選對象代理與協議的類似:
代理與協議都是使用@protocol
來進行聲明, 而且提供方法的一種模式, 看起來沒啥不同.代理與協議的不一樣:
其實就如同它們的職能所說,代理
是爲了下降對象與對象之間的耦合度,協議
是用來約束對象或篩選對象
這裏咱們用代碼演示一下吧, 這樣子更加的簡單明瞭, 不過這裏要注意一下,
Protocol
是沒有.m
文件的
建立完協議就要建立顧客了, 而且這個顧客類是必須遵照咱們建立的
Protocol
, 而後在這個Protocol
里加個判斷.
如今咱們來初始化一下這個顧客類, 而且校驗一下咱們所寫的
Protocol
是否生效.
先輸入
10000
再輸入
1000000
其實在iOS中, 就有一個類叫作
NSProxy
, 它也能夠用來實現代理模式
, 但在這裏先不作介紹, 後面有時間再另外寫一篇文章去講解怎麼用NSProxy
去實現代理模式, 若是有好奇心特別重的朋友, 也能夠自行去翻查一下資料~
通過上面的演示, 就知道
代理模式
並無想象中那麼複雜, 說白了, 所謂的代理模式
就是爲了下降對象與對象之間的耦合度, 爲了方便維護罷了, 同時咱們也知道了代理
與協議
之間的區別, 這篇文章就到了, 謝謝你們的觀看~
項目地址: github.com/CainRun/Des…