青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

f(sixleaves) = sixleaves

重劍無(wú)鋒 大巧不工

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  95 隨筆 :: 0 文章 :: 7 評(píng)論 :: 0 Trackbacks
所謂的代理設(shè)計(jì)模式,其設(shè)計(jì)目的就是為了解耦合,讓不用改變主體代碼邏輯的情況下,把代理對(duì)象所屬于的類(lèi)可以替換掉為不同的類(lèi)。
請(qǐng)先看如下代碼。
Person.h
 1 #import <Foundation/Foundation.h>
 2 
 3 @class Agent;
 4 
 5 @interface Person : NSObject
 6 
 7 - (void)buyTicket;
 8 
 9 @property (nonatomic, strong) Agent* delegate;
10 
11 @end
12 

Person對(duì)象,不想通過(guò)自己去買(mǎi)票,叫一個(gè)助手去買(mǎi),這個(gè)助手就是個(gè)代理。但是如果我們直接這樣實(shí)現(xiàn),Agent就寫(xiě)死了,也就是對(duì)象類(lèi)型是寫(xiě)死得。
下次如果代碼中更換了一個(gè)NextAgent類(lèi),則還要更改類(lèi)名。或者假如Agent在項(xiàng)目中去掉了,那么Person這個(gè)類(lèi)的buyTicket也就萎了。也就是說(shuō),
耦合性是強(qiáng),所以我們可以借用protocol來(lái)實(shí)現(xiàn)解耦合的代理設(shè)計(jì)模式。具體的思想就是,通過(guò)protocol定義了一組代理們必須實(shí)現(xiàn)的方法。并且將Agent *
替換成萬(wàn)能指針id。這樣的話就是id<TicketProtocol> delegate.也就說(shuō)delegate是個(gè)仁義實(shí)現(xiàn)了TicketProtocol的對(duì)象,我們可以通過(guò)這個(gè)對(duì)象來(lái)購(gòu)買(mǎi)票。
更重要的是統(tǒng)一了邏輯,具體的邏輯交給了要繼承這個(gè)TicketProtocol的類(lèi)去實(shí)現(xiàn)。這樣我們就不用改變Person.m中的代碼。說(shuō)了這么多,先看下Person.m
中的代碼,理解下~。
Person.m
 1 #import "Person.h"
 2 #import "Agent.h"
 3 @implementation Person
 4 
 5 - (void)buyTicket
 6 {
 7     /*
 8         需求讓代理幫忙詢問(wèn)下票價(jià),剩余的張數(shù)
 9      */
10     
11     double price = [_delegate ticketPrice];
12     
13     int number = [_delegate leftTicketsNumber];
14     
15     NSLog(@"票價(jià)%lf, 剩下%d張", price, number);
16 }
17 
18 
19 - (void)dealloc
20 {
21     
22     NSLog(@"Person-dealloc");
23 
24 }
25 
26 @end
27 

Agent有兩個(gè)方法,分別為ticketPrice和leftTicketsNumber。分別返回一個(gè)價(jià)格和剩余票數(shù)。模擬實(shí)現(xiàn)很簡(jiǎn)單,所以Agent不詳細(xì)
給出。

main.m
 1 #import <Foundation/Foundation.h>
 2 #import "Person.h"
 3 #import "Agent.h"
 4 int main(int argc, const char * argv[]) {
 5     
 6     // 代理設(shè)計(jì)模式
 7     
 8     
 9     Person *p = [[Person alloc] init];
10     
11     Agent *a = [[Agent alloc] init];
12     
13     p.delegate = a;
14     
15     [p buyTicket];
16     
17     return 0;
18 }
19 

那么具體如何改變,請(qǐng)看更改后的代碼:
TicketProtocol.h
 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol TicketProtocol <NSObject>
 4 
 5 - (double)ticketPrice;
 6 
 7 - (int)leftTicketsNumber;
 8 
 9 @end
10 


Person.h
 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol TicketProtocol;
 4 
 5 
 6 @interface Person : NSObject
 7 
 8 - (void)buyTicket;
 9 
10 @property (nonatomic, strong) id<TicketProtocol> delegate;
11 
12 @end

======華麗的分割線===========
這樣更改之后,就算你在更換代理,也不會(huì)Person類(lèi)的代碼也不需要更改。

總結(jié)

代理的概念:
當(dāng)某個(gè)類(lèi)的功能交個(gè)其他類(lèi)去實(shí)現(xiàn)。那個(gè)實(shí)現(xiàn)的類(lèi)就是代理。

代理模式使用場(chǎng)合:
1.用來(lái)解耦合。當(dāng)一個(gè)類(lèi)的功能需要其他類(lèi)來(lái)實(shí)現(xiàn),又不確定是由哪個(gè)類(lèi)來(lái)實(shí)現(xiàn),可以使用代理設(shè)計(jì)模式。

代理設(shè)計(jì)模式的實(shí)現(xiàn):
1.定義成員變量為萬(wàn)能指針,并且該對(duì)象必須是繼承某個(gè)協(xié)議。
posted on 2015-05-13 16:39 swp 閱讀(506) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): objective-c
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品水蜜桃av综合天堂| 日韩小视频在线观看| 牛牛国产精品| 欧美视频一区二区三区四区| 亚洲第一天堂av| 国产精品亚洲а∨天堂免在线| 久久人人爽人人爽| 在线观看成人av| 欧美日韩三级| 男人的天堂亚洲在线| 理论片一区二区在线| 午夜影院日韩| 欧美一区二区三区四区在线| 欧美成人精品在线视频| 亚洲欧美影音先锋| 国产真实精品久久二三区| 欧美特黄一区| 久久综合狠狠综合久久综青草| 免费在线亚洲| 日韩一级不卡| 一区二区三区产品免费精品久久75 | 国产在线一区二区三区四区| 欧美呦呦网站| 亚洲欧美日韩天堂一区二区| 亚洲国产精品欧美一二99| 欧美日韩中文字幕日韩欧美| 欧美日韩午夜激情| 欧美性一二三区| 激情五月综合色婷婷一区二区| 精品不卡一区| 国产欧美综合一区二区三区| 国产精品美女视频网站| 国产一区二区精品久久| 在线观看欧美日本| 亚洲精品一区二区在线| 亚洲精品乱码久久久久久| 亚洲日本中文字幕| 久久精品国产亚洲精品| 日韩视频免费观看| 亚洲国产精品一区二区www| 亚洲全部视频| 久久亚洲综合色一区二区三区| 欧美另类69精品久久久久9999| 国产日韩精品一区观看| 亚洲黄网站在线观看| 亚洲国产免费看| 久久综合久久综合久久综合| 亚洲欧美日韩国产成人| 麻豆视频一区二区| 国产精品免费观看视频| 一区二区三区久久网| 欧美一区观看| 久久久久久久久久久久久女国产乱 | 欧美成人免费网站| 亚洲福利av| 欧美激情一二三区| 免费成人激情视频| 亚洲高清视频在线观看| 亚洲欧洲日产国产综合网| 欧美国产激情二区三区| 揄拍成人国产精品视频| 亚洲激情第一区| 国产精品va在线播放我和闺蜜| 亚洲精品在线一区二区| 亚洲高清一二三区| 韩国欧美一区| 欧美成人精品一区二区| 国产精品家教| 老司机成人网| 欧美日韩一二三四五区| 久久综合久久综合久久综合| 性久久久久久久久| 亚洲激情婷婷| 久久久久国内| 亚洲成人自拍视频| 亚洲欧美国产不卡| 国内在线观看一区二区三区| 亚洲美女在线一区| 久久香蕉国产线看观看av| 国产精品久久网| 亚洲国产欧美在线人成| 永久91嫩草亚洲精品人人| 亚洲欧洲一区二区三区在线观看| 久久午夜精品一区二区| 亚洲综合色自拍一区| 亚洲欧美中日韩| 亚洲久久一区| 欧美成人午夜77777| 国内视频一区| 久色婷婷小香蕉久久| 在线看欧美日韩| 欧美一区二区三区视频在线 | 一区二区免费在线播放| 欧美aaa级| 精品动漫3d一区二区三区| 欧美一级视频精品观看| 久久精品免视看| 精品福利av| 久热成人在线视频| 久久精品国产99| 国语自产精品视频在线看一大j8 | 中文在线资源观看视频网站免费不卡| 亚洲国产高清高潮精品美女| 美日韩精品视频| 欧美不卡视频| 精品福利免费观看| 久久精品一区蜜桃臀影院| 久久中文欧美| 亚洲毛片视频| 老司机久久99久久精品播放免费| 欧美国产日韩亚洲一区| 亚洲精品永久免费| 136国产福利精品导航网址应用 | 亚洲视频在线观看网站| 欧美激情一区二区久久久| 亚洲一区免费在线观看| 欧美大片在线看| 99精品欧美一区| 国产精品日韩欧美大师| 久久欧美中文字幕| 久久国内精品自在自线400部| 欧美一级淫片播放口| 亚洲高清免费| 狠狠色丁香婷婷综合| 国产在线拍偷自揄拍精品| 久久久久久久久久久久久女国产乱| 亚洲视频一区二区| 一本久久青青| 国产精品99久久不卡二区| 免费日本视频一区| 久久免费视频这里只有精品| 欧美国产日韩a欧美在线观看| 欧美一区二区福利在线| 精品盗摄一区二区三区| 在线色欧美三级视频| 亚洲国产片色| 亚洲国产精品电影| 亚洲国产小视频| 国精品一区二区| 亚洲风情亚aⅴ在线发布| 精品成人在线视频| 亚洲欧洲综合| 亚洲欧美日韩综合国产aⅴ| 一区二区欧美国产| 亚洲精品美女免费| 午夜精品久久久久久99热| 欧美在线不卡| 亚洲欧洲美洲综合色网| 亚洲电影av在线| 亚洲精品免费在线| 欧美一区午夜视频在线观看| 久久激情五月激情| 久久久伊人欧美| 亚洲经典三级| 亚洲欧美清纯在线制服| 欧美呦呦网站| 亚洲视频免费| 欧美韩国日本一区| 国产欧美综合一区二区三区| 国产精品婷婷午夜在线观看| 亚洲国产精品悠悠久久琪琪 | 免费试看一区| 一区二区三区精密机械公司 | 亚洲人成绝费网站色www| 一本在线高清不卡dvd| 玖玖玖国产精品| 亚洲免费小视频| 欧美在线一区二区| 很黄很黄激情成人| 欧美激情va永久在线播放| 欧美成人中文| 午夜精品久久久久久久99黑人| 欧美精品一区二区三区在线播放| 亚洲电影自拍| 日韩午夜av电影| 欧美日韩福利| 日韩视频免费观看| 国产精品99久久久久久久久| 国产精品久久久久久久久果冻传媒 | 国产精品午夜在线| 亚洲一区二区三区中文字幕在线 | 男人的天堂亚洲| 亚洲一区二区三区在线观看视频| 在线观看久久av| 亚洲国产三级在线| 欧美色123| 亚洲国产精品久久精品怡红院| 免费成人高清在线视频| 亚洲一区日韩在线| 一本到高清视频免费精品| 狠狠色狠狠色综合日日小说| 99视频一区| 国产香蕉97碰碰久久人人| 免费不卡视频| 国产精品有限公司| 亚洲毛片在线| 亚洲欧洲日本mm| 欧美在线亚洲在线| 午夜精品视频在线| 国产精品久久久久久久久借妻 |