(七)大话设计模式 -外观模式Facade(门面模式)(iOS版)

简介

外观模式(或门面模式)隐藏系统的复杂性,并为客户端提供一个客户端可以访问系统的接口。 这种类型的设计模式属于结构模式,因为此模式为现有系统添加了一个接口以隐藏其复杂性。

简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用

代码实现

用例场景
我们举个电脑启动的例子,用户只要按一下启动键就可以启动电脑了,但是用户不知道电脑启动涉及CPU,硬盘,内存,主板等之间的内部启动是如何交互关联.这就是外观模式的作用!隐藏系统的复杂性,对外暴露一个简单易用的接口,调用者不用关心复制的内部原理(我们写一个公用组件的时候,大多数也是本着这个模式原则)

Objective-C开发中常见的有:SDK,framework,公用组件等

PC启动代码
三个对象 Computer,CPU,Disk

#import 

NS_ASSUME_NONNULL_BEGIN

//电脑组件基类
@interface PCComponent : NSObject

-(void)start;

-(void)shutDown;

@end

NS_ASSUME_NONNULL_END
#import "PCComponent.h"

@implementation PCComponent

-(void)start {
    NSLog(@"%@启动",NSStringFromClass([self class]));
}

-(void)shutDown {
    NSLog(@"%@关闭",NSStringFromClass([self class]));
}

@end

CPU

#import 
#import "PCComponent.h"
NS_ASSUME_NONNULL_BEGIN

@interface CPU : PCComponent

@end

NS_ASSUME_NONNULL_END
-------------------------------------------------------
#import "CPU.h"

@implementation CPU

@end

Disk

#import "PCComponent.h"

NS_ASSUME_NONNULL_BEGIN

@interface Disk : PCComponent

@end

NS_ASSUME_NONNULL_END

-------------------------------------------------------
#import "Disk.h"

@implementation Disk

@end

Computer (组装一台电脑 标配一些核心部件CPU,DISK)

#import 
#import "CPU.h"
#import "Disk.h"
NS_ASSUME_NONNULL_BEGIN

@interface Computer : NSObject

-(void)start;

-(void)shutDown;


@end

NS_ASSUME_NONNULL_END

#import "Computer.h"

@interface Computer ()
//一台电脑的部件
@property (nonatomic,strong) CPU *cpu;
@property (nonatomic,strong) Disk *disk;

@end

@implementation Computer

-(instancetype)init {
    if (self = [super init]) {
        //组装一台电脑 标配一些核心部件
        self.cpu = [[CPU alloc] init];
        self.disk = [[Disk alloc] init];
    }
    return self;
}

-(void)start {
    NSLog(@"%@启动",NSStringFromClass([self class]));
    [self.cpu start];
    [self.disk start];
}

-(void)shutDown {
    NSLog(@"%@关闭",NSStringFromClass([self class]));
    [self.cpu shutDown];
    [self.disk shutDown];
}


@end

对外使用

    /*
     外观模式(门面模式)
     对外开放简单易用的接口,外部不用关心内部的复杂逻辑
     */
    Computer *pc = [[Computer alloc] init];
    [pc start];//用户不用知道PC启动的内部原理 只要按一下启动键就可以了 内部复杂的程序交给内部解决
    [pc shutDown];

结果

2019-03-22 10:18:22.677145+0800 DesignModeDemo[46679:708389] Computer启动
2019-03-22 10:18:22.677265+0800 DesignModeDemo[46679:708389] CPU启动
2019-03-22 10:18:22.677405+0800 DesignModeDemo[46679:708389] Disk启动
2019-03-22 10:18:22.682417+0800 DesignModeDemo[46679:708389] Computer关闭
2019-03-22 10:18:22.682621+0800 DesignModeDemo[46679:708389] CPU关闭
2019-03-22 10:18:22.682780+0800 DesignModeDemo[46679:708389] Disk关闭

你可能感兴趣的:((七)大话设计模式 -外观模式Facade(门面模式)(iOS版))