美文网首页
(七)大话设计模式 -外观模式Facade(门面模式)(iOS版

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

作者: 林鹏_dev | 来源:发表于2019-03-22 10:36 被阅读0次

    简介

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

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

    代码实现

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

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

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

    #import <Foundation/Foundation.h>
    
    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 <Foundation/Foundation.h>
    #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 <Foundation/Foundation.h>
    #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版

          本文链接:https://www.haomeiwen.com/subject/saflvqtx.html