聊聊協(xié)議和對(duì)象

前言

在Objective-C中蒋伦,protocol和繼承區(qū)別還是蠻大的:

? ?@interface TestClass : TestFatherClass <TestProtocol>@end

講的是,一個(gè)類(lèi)TestClass谨湘,是繼承自類(lèi)TestFatherClass的子類(lèi),并遵守TestProtocol協(xié)議息罗。

在Swift中芋齿,就看不出來(lái)了:

? class TestClass : TestFatherClass , TestProtocol { ? }

也就是說(shuō)在swift中面相協(xié)議更加被看重了,面向?qū)ο缶幊趟枷氲幕A(chǔ)上侍匙,更加推薦面向協(xié)議編程的思想了氮惯。

協(xié)議是什么?

首先跳出編程想暗,協(xié)議是什么妇汗?

場(chǎng)景描述:甲方乙方為了實(shí)現(xiàn)一個(gè)目標(biāo)A,擬定了協(xié)議B说莫,雙方承諾共同遵守協(xié)議杨箭,協(xié)議B中提到,場(chǎng)景C的時(shí)候储狭,遵守協(xié)議的人要做D這件事互婿。

現(xiàn)在甲方遇到了場(chǎng)景C,在遵守協(xié)議的原則下辽狈,甲方做了D這件事慈参,最終甲方的目標(biāo)A實(shí)現(xiàn)了。

當(dāng)然這是非常理想的狀況刮萌。

那么iOS的協(xié)議是什么呢驮配?

A protocol declares a programmatic interface that any class may choose to implement. Protocols make it possible for two classes distantly related by inheritance to communicate with each other to accomplish a certain goal. They thus offer an alternative to subclassing. Any class that can provide behavior useful to other classes may declare a programmatic interface for vending that behavior anonymously. Any other class may choose to adopt the protocol and implement one or more of its methods, thereby making use of the behavior. The class that declares a protocol is expected to call the methods in the protocol if they are implemented by the protocol adopter.

實(shí)際上是一樣的:

甲方類(lèi)和乙方類(lèi)為了實(shí)現(xiàn)功能A,遵守了協(xié)議B着茸,協(xié)議B中有方法D壮锻,是在場(chǎng)景C的情況下要做D這件事。

那么在場(chǎng)景C的時(shí)候涮阔,D方法被執(zhí)行了猜绣,最終實(shí)現(xiàn)了功能A。

有點(diǎn)繞是不是澎语?

用對(duì)象和協(xié)議實(shí)現(xiàn)同一個(gè)詳細(xì)的場(chǎng)景(有點(diǎn)啰嗦途事,但是非常實(shí)際的例子)

舉個(gè)更詳細(xì)一點(diǎn)的例子:

有按鈕A,對(duì)應(yīng):人類(lèi)小明

現(xiàn)在要實(shí)現(xiàn)需求:點(diǎn)擊按鈕的時(shí)候擅羞,打印對(duì)應(yīng)類(lèi)的對(duì)應(yīng)名字+“你好尸变!”

umm...怎么實(shí)現(xiàn)呢?界面好說(shuō)减俏,刷刷刷就寫(xiě)好了A按鈕召烂。點(diǎn)擊事件怎么寫(xiě)呢?首先考慮的應(yīng)該是對(duì)象娃承。

寫(xiě)一個(gè)類(lèi)奏夫,是人類(lèi)怕篷,屬性有名字,方法有打招呼酗昼。小明是人類(lèi)廊谓,名字是小明,實(shí)現(xiàn)方法打招呼:打印“{.名字}你好麻削!”

ok蒸痹,需求解決了,歇了口氣呛哟,so easy!

第二天叠荠,需求改了:

有按鈕A兩個(gè),對(duì)應(yīng):人類(lèi)小明扫责;人類(lèi)小紅榛鼎,她的昵稱(chēng)是紅紅。

現(xiàn)在要實(shí)現(xiàn)需求:點(diǎn)擊按鈕的時(shí)候鳖孤,打印對(duì)應(yīng)類(lèi)的對(duì)應(yīng)名字+“你好者娱!”,小明顯示小明淌铐,小紅顯示紅紅肺然。

****!產(chǎn)品經(jīng)理拖出去槍斃腿准!小明和紅紅是什么鬼?為什么不打印小紅呢拾碌?算了吐葱,強(qiáng)壓怒火,改改改:

人類(lèi)這個(gè)類(lèi)里添加屬性:昵稱(chēng)校翔,打招呼的時(shí)候添加判斷弟跑,如果昵稱(chēng)不為空,顯示昵稱(chēng)防症,如果昵稱(chēng)為空孟辑,顯示名字

哼哼,難不倒我的蔫敲,再次解決饲嗽。

第三天,需求又變了:

有按鈕A3個(gè)奈嘿,對(duì)應(yīng):人類(lèi)小明貌虾;人類(lèi)小紅,她的昵稱(chēng)是紅紅裙犹;小狗小花尽狠。

現(xiàn)在要實(shí)現(xiàn)需求:點(diǎn)擊按鈕的時(shí)候衔憨,打印對(duì)應(yīng)類(lèi)的對(duì)應(yīng)名字+“你好!”袄膏,小明顯示小明践图,小紅顯示紅紅,小狗顯示小花沉馆。

********平项!給產(chǎn)品經(jīng)理扎個(gè)娃娃,天天刺刺刺悍及!不過(guò)飯碗不能丟闽瓢,依然要實(shí)現(xiàn)它:

代碼不能太難看,重構(gòu)一下心赶,動(dòng)物類(lèi)扣讼,屬性:名字,方法:打招呼(打印“{.名字}你好缨叫!”)椭符,人類(lèi),繼承自動(dòng)物類(lèi)(人也是動(dòng)物嘛)耻姥,屬性多一個(gè)昵稱(chēng)销钝,在打招呼方法添加判斷,如果昵稱(chēng)是空琐簇,super蒸健,如果昵稱(chēng)不為空,打印“{.昵稱(chēng)}你好婉商!”

寫(xiě)完之后就開(kāi)始擔(dān)心了似忧,如果哪一天產(chǎn)品經(jīng)理突發(fā)奇想添加個(gè)汽車(chē)按鈕怎么辦?撞死算了丈秩。他應(yīng)該不會(huì)那么無(wú)情無(wú)恥無(wú)理取鬧吧盯捌?

呵呵,偏偏第四天蘑秽,產(chǎn)品經(jīng)理告訴你饺著,他就是這么無(wú)情無(wú)恥無(wú)理取鬧,汽車(chē)不錯(cuò)肠牲,就加個(gè)汽車(chē)好了幼衰!

有按鈕A4個(gè),對(duì)應(yīng):人類(lèi)小明埂材;人類(lèi)小紅塑顺,她的昵稱(chēng)是紅紅;小狗小花;大眾汽車(chē)严拒,他的種類(lèi)是高爾夫扬绪,型號(hào)是xyz123。

現(xiàn)在要實(shí)現(xiàn)需求:點(diǎn)擊按鈕的時(shí)候裤唠,打印對(duì)應(yīng)類(lèi)的對(duì)應(yīng)名字+“你好挤牛!”,小明顯示小明种蘸,小紅顯示紅紅墓赴,小狗顯示小花,汽車(chē)顯示高爾夫xyz123航瞭。

是不是覺(jué)得這樣下去不是個(gè)事了诫硕?單純面向?qū)ο箝_(kāi)發(fā)似乎已經(jīng)不足以快速實(shí)現(xiàn)需求了,每次更迭如果脫離現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)刊侯,就會(huì)有重構(gòu)的必要章办,時(shí)間成本和調(diào)試成本大大增加,協(xié)議這個(gè)東西的作用體現(xiàn)出來(lái)了

協(xié)議:對(duì)它打招呼滨彻,有一個(gè)屬性:稱(chēng)呼

點(diǎn)擊事件打优航臁:{遵守協(xié)議:對(duì)它打招呼的類(lèi)的稱(chēng)呼}+“你好!”

人類(lèi)亭饵,名字小明休偶;人類(lèi),名字小紅辜羊,昵稱(chēng)紅紅踏兜。

想要對(duì)他們打招呼只要讓人類(lèi)遵守協(xié)議:對(duì)它打招呼,然后賦值時(shí)候只冻,順便判斷下庇麦,如果昵稱(chēng)不為空,就讓稱(chēng)呼是昵稱(chēng)喜德,如果昵稱(chēng)為空,就讓稱(chēng)呼是名字垮媒。

ok舍悯,管他加小狗還是汽車(chē)呢,只要讓它遵守協(xié)議:對(duì)它打招呼睡雇,把產(chǎn)品經(jīng)理打招呼的時(shí)候要顯示的稱(chēng)呼給“稱(chēng)呼”賦值萌衬,要來(lái)多少都沒(méi)事了。

總結(jié)

你如果覺(jué)得你的產(chǎn)品經(jīng)理沒(méi)這么坑它抱,我覺(jué)得你還是預(yù)防萬(wàn)一為好秕豫,我維護(hù)一個(gè)2年的產(chǎn)品,為了滿(mǎn)足多變的需求,定制了無(wú)數(shù)協(xié)議混移,現(xiàn)在看起來(lái)真的很好維護(hù)祠墅。

對(duì)象繼承的特點(diǎn):實(shí)現(xiàn)起來(lái)容易,但是擴(kuò)展和維護(hù)麻煩

協(xié)議的特點(diǎn):實(shí)現(xiàn)起來(lái)要定制協(xié)議歌径,可能有點(diǎn)麻煩毁嗦,但是耦合性非常低,利于維護(hù)回铛,擴(kuò)展性很強(qiáng)狗准。

能用協(xié)議的地方,還是多用吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茵肃,一起剝皮案震驚了整個(gè)濱河市腔长,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌验残,老刑警劉巖捞附,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胚膊,居然都是意外死亡故俐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)紊婉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)药版,“玉大人,你說(shuō)我怎么就攤上這事喻犁〔燮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵肢础,是天一觀的道長(zhǎng)还栓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)传轰,這世上最難降的妖魔是什么剩盒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮慨蛙,結(jié)果婚禮上辽聊,老公的妹妹穿的比我還像新娘。我一直安慰自己期贫,他們只是感情好跟匆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著通砍,像睡著了一般玛臂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天迹冤,我揣著相機(jī)與錄音讽营,去河邊找鬼。 笑死叁巨,一個(gè)胖子當(dāng)著我的面吹牛斑匪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锋勺,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蚀瘸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了庶橱?” 一聲冷哼從身側(cè)響起贮勃,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苏章,沒(méi)想到半個(gè)月后寂嘉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枫绅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年泉孩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片并淋。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寓搬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出县耽,到底是詐尸還是另有隱情句喷,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布兔毙,位于F島的核電站唾琼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澎剥。R本人自食惡果不足惜锡溯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哑姚。 院中可真熱鬧趾唱,春花似錦、人聲如沸蜻懦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宛乃。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間征炼,已是汗流浹背析既。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谆奥,地道東北人眼坏。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像酸些,于是被迫代替她去往敵國(guó)和親宰译。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)魄懂、插件沿侈、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,123評(píng)論 4 61
  • 眼里在乎的你缀拭, 心里想念的你, 夢(mèng)里出現(xiàn)的你填帽, 那一個(gè)非常害怕失去的你蛛淋, 所以我捧在手心, 所以我加倍珍惜篡腌。 太多...
    晨風(fēng)世界閱讀 283評(píng)論 0 1
  • 一:為什么要實(shí)現(xiàn)負(fù)載均衡 當(dāng)一臺(tái)服務(wù)器的單位時(shí)間內(nèi)訪(fǎng)問(wèn)量越大的時(shí)候褐荷,服務(wù)器壓力會(huì)越大,當(dāng)一臺(tái)服務(wù)器壓力大得超過(guò)自身...
    芷_念閱讀 423評(píng)論 0 0
  • 在愛(ài)情里哀蘑, 男的要是一直寵著女的就能談很長(zhǎng)時(shí)間并且感情特別好 诚卸,要是女的一直忍讓男的,這段感情就不會(huì)太久 因?yàn)檎f(shuō)句...
    篤學(xué)青衿閱讀 88評(píng)論 0 0