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

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在线| 在线成人h网| 1024欧美极品| 亚洲激情偷拍| 亚洲毛片在线看| 日韩亚洲欧美一区二区三区| 日韩亚洲精品电影| 亚洲午夜免费视频| 性色av香蕉一区二区| 国模大胆一区二区三区| 欧美日韩精品免费看| 欧美色中文字幕| 国产日韩欧美在线观看| 永久91嫩草亚洲精品人人| 亚洲国产日韩欧美在线99| 99国产精品久久久久久久久久| 亚洲伊人观看| 久久亚洲图片| 亚洲精华国产欧美| 亚洲已满18点击进入久久| 久久精品一二三区| 欧美大片第1页| 国产精品系列在线| 亚洲人体偷拍| 久久精品成人欧美大片古装| 免费一级欧美片在线观看| 日韩视频在线免费| 久久久国产精品一区| 欧美日韩1区| 黄色在线一区| 亚洲一区二区网站| 亚洲春色另类小说| 性娇小13――14欧美| 欧美日韩日本国产亚洲在线| 极品av少妇一区二区| 亚洲午夜精品国产| 欧美激情成人在线视频| 亚洲综合精品| 欧美日韩亚洲一区二区三区| 日韩视频在线观看一区二区| 西瓜成人精品人成网站| 欧美老女人xx| 亚洲片国产一区一级在线观看| 久久久久**毛片大全| 中文av一区特黄| 欧美精品xxxxbbbb| 亚洲二区视频| 米奇777超碰欧美日韩亚洲| 一区二区日韩精品| 欧美激情二区三区| 亚洲欧洲精品一区二区三区波多野1战4| 久久大综合网| 亚洲在线一区二区| 欧美午夜无遮挡| 亚洲尤物在线视频观看| 亚洲日韩第九十九页| 欧美大片18| 一本色道综合亚洲| 亚洲美女视频| 国产精品久久久久影院色老大| 亚洲社区在线观看| 99re这里只有精品6| 欧美日韩国产免费| 亚洲性感美女99在线| 夜夜嗨av一区二区三区中文字幕 | 一级日韩一区在线观看| 免费在线一区二区| 国产主播精品在线| 久久久久久精| 欧美伊久线香蕉线新在线| 国产精品日韩久久久| 亚洲女人天堂av| 亚洲自拍啪啪| 国产日韩在线亚洲字幕中文| 欧美在线视频免费| 亚洲国产精品久久91精品| 免费成人你懂的| 麻豆91精品91久久久的内涵| 亚洲黄色片网站| 亚洲日本欧美| 国产精品人成在线观看免费| 欧美在线免费一级片| 久久久久久亚洲精品中文字幕| 在线免费观看日韩欧美| 亚洲国产精品小视频| 欧美日韩一区综合| 久久免费午夜影院| 欧美激情aaaa| 欧美一区二区三区免费看| 久久久一区二区三区| 日韩视频一区二区三区在线播放免费观看| 亚洲毛片一区二区| 国产色产综合色产在线视频| 欧美国产精品劲爆| 国产精品国产三级国产| 久久美女艺术照精彩视频福利播放| 麻豆久久婷婷| 先锋a资源在线看亚洲| 久热精品在线视频| 亚洲欧美成人一区二区在线电影| 欧美中文字幕久久| 中日韩男男gay无套| 久久久www成人免费精品| 亚洲最新合集| 久久久国产成人精品| 亚洲影视在线| 欧美高潮视频| 久久先锋影音av| 欧美亚洲成人网| 亚洲国产欧美在线| 狠狠色丁香久久婷婷综合_中| 99热在这里有精品免费| 在线观看av不卡| 亚洲欧美日韩在线观看a三区| 99精品国产在热久久婷婷| 欧美在线视频全部完| 亚洲香蕉在线观看| 欧美日韩mp4| 亚洲电影视频在线| 好看的日韩视频| 亚洲直播在线一区| 亚洲午夜三级在线| 欧美日本二区| 亚洲国产精品欧美一二99| 国产一区视频在线看| 亚洲免费在线观看| 亚洲欧美伊人| 国产精品理论片| 一区二区三区视频免费在线观看| 蜜桃av一区二区三区| 伊人精品成人久久综合软件| 中文在线不卡| 一区二区三区日韩欧美| 久热re这里精品视频在线6| 狂野欧美一区| 樱桃国产成人精品视频| 亚洲欧洲在线免费| 久久婷婷亚洲| 欧美成年人视频网站欧美| 国产亚洲精品一区二555| 亚洲在线视频免费观看| 午夜性色一区二区三区免费视频| 欧美日韩亚洲91| 99国产精品99久久久久久粉嫩| 一区二区三区高清不卡| 欧美视频一二三区| 亚洲欧美日韩成人高清在线一区| 午夜一级久久| 国产一区二区三区免费在线观看 | 香蕉尹人综合在线观看| 久久精品成人一区二区三区蜜臀| 国产欧美一区二区三区久久| 久久成人久久爱| 免费观看亚洲视频大全| 亚洲欧洲精品一区二区三区不卡| 欧美激情视频在线播放 | 亚洲精品美女91| 亚洲一区二区三区影院| 国产精品美女久久久久aⅴ国产馆| 亚洲午夜激情网站| 久久精品国产欧美亚洲人人爽| 精品91在线| 欧美国产欧美综合 | 国产女精品视频网站免费| 午夜精品区一区二区三| 免费亚洲一区| 亚洲神马久久| 国产日韩欧美在线播放| 男男成人高潮片免费网站| 日韩一区二区久久| 欧美在线观看一区二区| 136国产福利精品导航| 欧美久久视频| 性欧美xxxx视频在线观看| 亚洲国产成人久久综合| 男人的天堂亚洲| 亚洲视屏一区| 欧美成人免费大片| 亚洲欧美日韩区| 亚洲电影在线观看| 国产精品护士白丝一区av| 久久久久久一区二区三区| 夜夜精品视频一区二区| 欧美99在线视频观看| 欧美一区二区精品久久911| 亚洲破处大片| 国产一区二区毛片| 欧美色视频一区| 免费欧美日韩| 欧美一区二区免费| 宅男噜噜噜66一区二区66| 久久爱另类一区二区小说| 久久精品国产99国产精品| 亚洲精品欧美日韩| 国内外成人免费视频| 欧美三级电影大全| 欧美国产亚洲视频|