iOS設計模式之中介者模式

? ? ? ? ?近兩年,中國房價可謂瘋狂至極,買賣房產獲利非常可觀,房地產中介行業也因此生機蓬勃。大街上的“xx地產”隨處可見,在街上發傳單追你一條街推銷房子的中介人屢見不鮮,當然也沒少接到來自中介的騷擾電話咯。大家對中介這種角色估計也不陌生,所以今天的設計模式就以這個房地產中介作為故事背景吧!

無中介.jpg

從無中介.jpg可以看出,要是沒有中介的存在,買賣家之間的交流是如此困難且復雜。買家買房要跑去找賣家,賣家買房又得跑去找買家。如果現實真的如此,估計買賣家早就拍桌子說:“老子xx不買(賣)了!”如此反復,房地產業還可能像現在這樣撐起國家經濟嗎?


有中介.jpg

好了,有中介的接入,一切都變得so easy了!買家要買房,直接到中介看房源,賣家賣房,直接委托中介推銷,買賣家通過中介相互取得聯系,進行溝通,最后達成買賣共識。呃..不瞎扯了,馬上進入的主題!!!!


一、基本定義

定義:用一個中介者對象封裝一系列的對象交互,中介者使各對象不需要顯示地相互作用,從而使耦合松散,而且可以獨立地改變它們之間的交互。

在中介者模式的定義中,各個類都被看作兩個大類,分別是中介者類和同事類。

這句官方的定義看起來很抽象吧,要不試試結合我們的故事背景思考思考~這段定義可以分為4段來理解(中介者類=中介人,同事類=買賣家):

①用一個中介者對象封裝一系列的對象交互——這就好比中介人擁有買賣家雙方的聯系方式,在買賣過程中向買賣家提供最新的消息和有效的幫助等等

②中介者使各對象不需要顯示地相互作用——買賣家雙方都會把意愿交待給中介人,透過中介人把意愿傳達給對方,而不需要買賣家之間直接通電話聯系

③從而使耦合松散——買賣家之間的聯系從“買家<——>買家”變成“買家<——>中介<——>買家”,買賣家的直接聯系斷開,中介成為買賣雙方聯系的橋梁

④可以獨立地改變它們之間的交互——中介告訴賣家房價升了,賣家就做出升價的決定看到這里,有些童鞋應該已經從一臉懵逼進化到“原(san)來(lian)如(meng)此(bi)”。咳咳.....馬上進入下一環節let go!!!


二、UML

馬上進入第二環節,請認真看UML圖 * 3 (重要事情說三遍!!!)

UML圖

三、實例代碼

AbstractClient.h

@class AbstractMediator;

//AbstractClient作為抽象基類,封裝客戶類(官方說法叫同事類)的通用屬性、方法

@interface AbstractClient : NSObject

@property (nonatomic,strong) AbstractMediator *mediator;

@property (nonatomic,copy)? NSString *name;

//委托中介辦事

- (void) entrustMediator:(AbstractMediator *)mediator;

@end

AbstractMediator.h

@class AbstractClient;

//AbstractMediator作為抽象基類,封裝中介者類的通用屬性、方法

@interface AbstractMediator : NSObject

@property (nonatomic,copy) NSString *name;//中介名字

@property (nonatomic,strong) NSMutableArray *clients;//保存客戶

//保留客戶資料

- (void) saveClintProfile:(AbstractClient *)client

MediatorLJ.h

@interface MediatorLJ : AbstractMediator

//為買家篩選房源,和合適的賣家配對起來

- (void) screenHouseForBuyer:(Buyer *)buyer;

@end

AbstractMediator類和MediatorLJ類便完成了定義中的第一點“封裝一系列的對象交互”!

Buyer.h

@interface Buyer : AbstractClient

@property (nonatomic,assign) NSInteger money;//買家成副身家

- (void) buyHouse;

@end

Seller.h

@interface Seller : AbstractClient

@property (nonatomic,assign) NSInteger price;//賣家房子的價值

@end

main.m

//從前,有家地產中介叫偉恒地產

MediatorLJ *weihengMdr = [[MediatorLJ alloc] init];

weihengMdr.name = @"偉恒地產";

//一天,小民有套500萬的別墅想賣了,委托偉恒地產幫忙賣

Seller *xiaoMin = [[Seller alloc] init];

xiaoMin.name = @"小民";

xiaoMin.price = 5000000;//看看有沒寫少個0,是的話買家就賺大發了

[xiaoMin entrustMediator:weihengMdr];

//偉恒地產留下小民信息

[weihengMdr saveClintProfile:xiaoMin];

//第二天,小焰有套100萬的樓梯房想賣了,委托偉恒地產幫忙賣

Seller *xiaoYan = [[Seller alloc] init];

xiaoYan.name = @"小焰";

xiaoYan.price = 1000000;

[xiaoYan entrustMediator:weihengMdr];

[weihengMdr saveClintProfile:xiaoYan];

//第三天小思想買房,到了偉恒地產找房源

Buyer *xiaoSi = [[Buyer alloc] init];

xiaoSi.money = 1500000;

xiaoSi.name = @"小思";

[xiaoSi entrustMediator:weihengMdr];

//偉恒地產留下小思的信息

[weihengMdr saveClintProfile:xiaoSi];

//偉恒地產給小思匹配房源

[xiaoSi buyHouse];

從示例代碼main.m中可以看出,seller和buyer之間沒有了直接的聯系,原本相互影響、相互依賴引用的關系消除了,只和中介有通信,所有的交互邏輯都集中在中介者類中,是不是想想都爽呢!!!

完整的demo放在GitHub上,歡迎觀看學習? ~中介者模式demo


四、模式分析

中介者模式是一個相對容易理解的模式,我們很容易就能結合現實生活中去。做iOS開發的必然使用過MVC模式,MVC模式是中介者模式的一種表現形式,Comtroller(中介者)承擔兩個同事類(View和Modle)之間的中轉和協調作用。

中介者模式的優點

①解耦合

模式中把多個同事類的交互邏輯封裝在中介類中,同事類之間不再相互依賴引用,各個同事類可以獨立變化

②把交互邏輯集中管理

當同事類間的交互發生變化時,只需要在中介者修改邏輯,提高了開發效率又降低了維護成本,可謂一舉兩得

中介者模式的缺點

中介者模式的優點如果使用不好可能就變成了缺點,由于交互邏輯的高度集中化,中介者會隨著業務邏輯的不斷增加而變得臃腫膨脹,變得難以管理。


五、總結

第一次寫技術博客,心情無比激動啊!!!希望本文能給讀到這兒的你有所幫助,文中有什么不足請勿手下留情,大聲地懟我,喜歡可以點個贊哦,非常感謝大家的支持!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容