IOS设计模式集中营

简介:作为一名开发人员掌握设计模式是一项基本的技能。设计模式是在软件设计上去解决普通问题的可重用的方法.他们是是帮助你让所写的代码更加容易理解和提高可重用性的模板.它们还可以帮你创建松散耦合的代码是你能不费很大功夫就可以改变或者替代你的代码中的一部分。
本文部分内容参考:
文章

1:外观设计模式

1.外观设计模式概念描述:为系统中的一组接口提供一个统一的接口。外观定义一个高层的接口,让子系统更易于使用。

2:角色
(1)子系统类:每个子系统定义了相关功能和模块的接口。
(2)Facade(外观类):整合子系统中的接口,客户端可以调用这个类的方法。
(3)Clients(客户端):通过外观类提供的接口和各个子系统的接口进行交互。

3.结构图

外观模式

4:使用场景
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2)开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3)维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

场景举例:现在买车子比较火热,就以买车子举例子吧!来到售车部我们选好了车子,现在进入到买车子的具体流程中。你从售车部买一辆车子,几乎要涉及到店里的每个部门,比如财务部门、销售部门、售后服务部门等等。

我们买一辆房子其实不需要跑遍每一个部门,我们只需要跟接待啊自己的销售服务人员沟通好就可以了,我们只要选择好车子,交钱(比如贷款,现金),其他的流程具体的服务人员会帮你完成。在这个例子中售车部的销售人员就是一个外观服务角色,其他的各个部门其实就类似一个个的子系统,为我们进行不同的服务,下面我们看一下具体的代码实现。

1.财务部门:FinanceDepartment:财务部门管理:现金付款、申请贷款、审核贷款、放款等业务。
@interface FinanceDepartment : NSObject
// 现金支付
- (void)cashPayment;

// 申请贷款
- (BOOL)applyLoan;

// 审核贷款
- (BOOL)auditLoan;

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

2.销售部门管理SalesDepartment:车辆调配、配件、赠品等业务。
@interface SalesDepartment : NSObject
// 提车
- (void)provideHouse;

// 车贴膜
- (void)carFilm;

// 行车记录仪
- (void)tachograph;

// 发动机护板
- (void)engineGuard;

// 脚垫
- (void)mat;
@end

3.售后服务部门AfterSales
@interface AfterSales : NSObject
// 洗车服务
- (void)carWash;

// 上牌服务
- (void)applyPlate;

// 贴膜服务
- (void)filming;

// 安装行车记录仪
- (void)installTachograph;
@end
上面是我们的子系统接口,对于客户来说没必要关心这么多业务,所以我们定义一个高层接口类来统一各个子系统的接口,这个类就是我们的4S销售接待人员的角色类:SalesServicesPeople。这是和客户端直接打交道的类。
@interface SalesServicesPeople : NSObject
- (void)buyCarWithCash;// 现金买车

- (void)buyCarWithLoad;// 贷款买车
@end

#import "SalesServicesPeople.h"
#import "AfterSales.h"
#import "FinanceDepartment.h"
#import "SalesDepartment.h"
@interface SalesServicesPeople(){
    FinanceDepartment *finance;// 财务部门
    SalesDepartment     *sales;// 销售部门
    AfterSales   *service;// 售后服务部门
}

@end
@implementation SalesServicesPeople

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

// 现金买车
- (void)buyCarWithCash{
    // 现金支付
    [finance cashPayment];
    
    // 赠送礼品
    [self gift];
    
    // 提供服务
    [self service];
}

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

// 服务
- (void)service{
    NSLog(@"售后服务:");
    [service carWash];
    [service applyPlate];
    [service filming];
    [service installTachograph];
}
// 贷款买车
- (void)buyCarWithLoad{
    
    if ([finance applyLoan]) {
        // 赠送礼品
        [self gift];
        
        // 提供服务
        [self service];
    }else{
    
        NSLog(@"贷款失败");
    }
}
最后直接在控制器调用就可以了
#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 = @"外观设计模式";
    
    self.salesPeople = [[SalesServicesPeople alloc] init];
    
    [self.salesPeople buyCarWithCash];
    
}

输出结果

2017-08-22 11:32:49.693 DesignPatterns[44298:13510747] 现金支付
2017-08-22 11:32:49.693 DesignPatterns[44298:13510747] 赠品有:
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] 发动机护板
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 脚垫
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 售后服务:
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 洗车服务
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747]  上牌服务
2017-08-22 11:32:49.696 DesignPatterns[44298:13510747] 贴膜服务
2017-08-22 11:32:49.697 DesignPatterns[44298:13510747] 安装行车记录仪

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容