IOS設(shè)計(jì)模式集中營(yíng)

簡(jiǎn)介:作為一名開發(fā)人員掌握設(shè)計(jì)模式是一項(xiàng)基本的技能痒芝。設(shè)計(jì)模式是在軟件設(shè)計(jì)上去解決普通問題的可重用的方法.他們是是幫助你讓所寫的代碼更加容易理解和提高可重用性的模板.它們還可以幫你創(chuàng)建松散耦合的代碼是你能不費(fèi)很大功夫就可以改變或者替代你的代碼中的一部分。
本文部分內(nèi)容參考:
文章

1:外觀設(shè)計(jì)模式

1.外觀設(shè)計(jì)模式概念描述:為系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的接口。外觀定義一個(gè)高層的接口,讓子系統(tǒng)更易于使用。

2:角色
(1)子系統(tǒng)類:每個(gè)子系統(tǒng)定義了相關(guān)功能和模塊的接口蝇棉。
(2)Facade(外觀類):整合子系統(tǒng)中的接口喜最,客戶端可以調(diào)用這個(gè)類的方法俐末。
(3)Clients(客戶端):通過外觀類提供的接口和各個(gè)子系統(tǒng)的接口進(jìn)行交互料按。

3.結(jié)構(gòu)圖

外觀模式

4:使用場(chǎng)景
(1)設(shè)計(jì)初期階段,應(yīng)該有意識(shí)的將不同層分離卓箫,層與層之間建立外觀模式载矿。
(2)開發(fā)階段,子系統(tǒng)越來越復(fù)雜烹卒,增加外觀模式提供一個(gè)簡(jiǎn)單的調(diào)用接口闷盔。
(3)維護(hù)一個(gè)大型遺留系統(tǒng)的時(shí)候,可能這個(gè)系統(tǒng)已經(jīng)非常難以維護(hù)和擴(kuò)展旅急,但又包含非常重要的功能逢勾,為其開發(fā)一個(gè)外觀類,以便新系統(tǒng)與其交互坠非。

場(chǎng)景舉例:現(xiàn)在買車子比較火熱敏沉,就以買車子舉例子吧!來到售車部我們選好了車子炎码,現(xiàn)在進(jìn)入到買車子的具體流程中。你從售車部買一輛車子秋泳,幾乎要涉及到店里的每個(gè)部門潦闲,比如財(cái)務(wù)部門、銷售部門迫皱、售后服務(wù)部門等等歉闰。

我們買一輛房子其實(shí)不需要跑遍每一個(gè)部門,我們只需要跟接待啊自己的銷售服務(wù)人員溝通好就可以了卓起,我們只要選擇好車子和敬,交錢(比如貸款,現(xiàn)金)戏阅,其他的流程具體的服務(wù)人員會(huì)幫你完成昼弟。在這個(gè)例子中售車部的銷售人員就是一個(gè)外觀服務(wù)角色,其他的各個(gè)部門其實(shí)就類似一個(gè)個(gè)的子系統(tǒng)奕筐,為我們進(jìn)行不同的服務(wù)舱痘,下面我們看一下具體的代碼實(shí)現(xiàn)。

1.財(cái)務(wù)部門:FinanceDepartment:財(cái)務(wù)部門管理:現(xiàn)金付款离赫、申請(qǐng)貸款芭逝、審核貸款、放款等業(yè)務(wù)渊胸。
@interface FinanceDepartment : NSObject
// 現(xiàn)金支付
- (void)cashPayment;

// 申請(qǐng)貸款
- (BOOL)applyLoan;

// 審核貸款
- (BOOL)auditLoan;

// 放款
- (BOOL)getLoad;
@end

2.銷售部門管理SalesDepartment:車輛調(diào)配旬盯、配件、贈(zèng)品等業(yè)務(wù)。
@interface SalesDepartment : NSObject
// 提車
- (void)provideHouse;

// 車貼膜
- (void)carFilm;

// 行車記錄儀
- (void)tachograph;

// 發(fā)動(dòng)機(jī)護(hù)板
- (void)engineGuard;

// 腳墊
- (void)mat;
@end

3.售后服務(wù)部門AfterSales
@interface AfterSales : NSObject
// 洗車服務(wù)
- (void)carWash;

// 上牌服務(wù)
- (void)applyPlate;

// 貼膜服務(wù)
- (void)filming;

// 安裝行車記錄儀
- (void)installTachograph;
@end
上面是我們的子系統(tǒng)接口胖翰,對(duì)于客戶來說沒必要關(guān)心這么多業(yè)務(wù)频丘,所以我們定義一個(gè)高層接口類來統(tǒng)一各個(gè)子系統(tǒng)的接口,這個(gè)類就是我們的4S銷售接待人員的角色類:SalesServicesPeople泡态。這是和客戶端直接打交道的類搂漠。
@interface SalesServicesPeople : NSObject
- (void)buyCarWithCash;// 現(xiàn)金買車

- (void)buyCarWithLoad;// 貸款買車
@end

#import "SalesServicesPeople.h"
#import "AfterSales.h"
#import "FinanceDepartment.h"
#import "SalesDepartment.h"
@interface SalesServicesPeople(){
    FinanceDepartment *finance;// 財(cái)務(wù)部門
    SalesDepartment     *sales;// 銷售部門
    AfterSales   *service;// 售后服務(wù)部門
}

@end
@implementation SalesServicesPeople

- (instancetype)init{
    self = [super init];
    
    if (self) {
        finance = [[FinanceDepartment alloc] init];
        sales = [[SalesDepartment alloc] init];
        service = [[AfterSales alloc] init];
        
    }
    return self;
}

// 現(xiàn)金買車
- (void)buyCarWithCash{
    // 現(xiàn)金支付
    [finance cashPayment];
    
    // 贈(zèng)送禮品
    [self gift];
    
    // 提供服務(wù)
    [self service];
}

// 贈(zèng)品
- (void)gift{
    NSLog(@"贈(zèng)品有:");
    [sales carFilm];
    [sales tachograph];
    [sales engineGuard];
    [sales mat];
}

// 服務(wù)
- (void)service{
    NSLog(@"售后服務(wù):");
    [service carWash];
    [service applyPlate];
    [service filming];
    [service installTachograph];
}
// 貸款買車
- (void)buyCarWithLoad{
    
    if ([finance applyLoan]) {
        // 贈(zèng)送禮品
        [self gift];
        
        // 提供服務(wù)
        [self service];
    }else{
    
        NSLog(@"貸款失敗");
    }
}
最后直接在控制器調(diào)用就可以了
#import "SalesViewController.h"
#import "SalesServicesPeople.h"
@interface SalesViewController ()
@property(nonatomic,readwrite,strong)SalesServicesPeople *salesPeople;

@end

@implementation SalesViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    self.navigationItem.title = @"外觀設(shè)計(jì)模式";
    
    self.salesPeople = [[SalesServicesPeople alloc] init];
    
    [self.salesPeople buyCarWithCash];
    
}

輸出結(jié)果

2017-08-22 11:32:49.693 DesignPatterns[44298:13510747] 現(xiàn)金支付
2017-08-22 11:32:49.693 DesignPatterns[44298:13510747] 贈(zèng)品有:
2017-08-22 11:32:49.695 DesignPatterns[44298:13510747] 車貼膜
2017-08-22 11:32:49.695 DesignPatterns[44298:13510747] 行車記錄儀
2017-08-22 11:32:49.695 DesignPatterns[44298:13510747] 發(fā)動(dòng)機(jī)護(hù)板
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 腳墊
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 售后服務(wù):
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 洗車服務(wù)
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747]  上牌服務(wù)
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 貼膜服務(wù)
2017-08-22 11:32:49.697 DesignPatterns[44298:13510747] 安裝行車記錄儀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市某弦,隨后出現(xiàn)的幾起案子桐汤,更是在濱河造成了極大的恐慌,老刑警劉巖靶壮,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怔毛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡腾降,警方通過查閱死者的電腦和手機(jī)拣度,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螃壤,“玉大人抗果,你說我怎么就攤上這事〖榍纾” “怎么了冤馏?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)寄啼。 經(jīng)常有香客問我逮光,道長(zhǎng),這世上最難降的妖魔是什么墩划? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任涕刚,我火速辦了婚禮,結(jié)果婚禮上乙帮,老公的妹妹穿的比我還像新娘杜漠。我一直安慰自己,他們只是感情好蚣旱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布碑幅。 她就那樣靜靜地躺著,像睡著了一般塞绿。 火紅的嫁衣襯著肌膚如雪沟涨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天异吻,我揣著相機(jī)與錄音裹赴,去河邊找鬼喜庞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棋返,可吹牛的內(nèi)容都是我干的延都。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼睛竣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晰房!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起射沟,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤殊者,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后验夯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猖吴,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年挥转,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了海蔽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绑谣,死狀恐怖党窜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情域仇,我是刑警寧澤刑然,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站暇务,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏怔软。R本人自食惡果不足惜垦细,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挡逼。 院中可真熱鬧括改,春花似錦、人聲如沸家坎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虱疏。三九已至惹骂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間做瞪,已是汗流浹背对粪。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工右冻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人著拭。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓纱扭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親儡遮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乳蛾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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