A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 不二晨 于 2018-6-28 08:38 编辑

外观模式的解析-iOS其他设计模式的介绍

1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS
2、建造者模式的解析-iOS
3、单例模式的解析-iOS
4、原型模式的解析-iOS
5、代理模式的解析-iOS
6、适配器模式的解析-iOS
7、装饰器模式的解析-iOS
8、外观模式的解析-iOS
9、桥接模式的解析-iOS

概率描述

“为子系统中的一组接口提供一个统一的接口。外观模式定义了一个更高层次的接口,这个接口使得这一子系统更加容易使用。” —-《设计模式》(Addison-Wesley,1994)

角色

1、子系统:底层的子系统,定义了自己的相关的功能和接口
2、外观类:整合底部子系统的接口供给外部调用者调用
3、外部调用者:调用外观类的接口或者子系统的接口,和底层子系统进行通信

实用场景

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

案例解析

我记得之前在讲代理模式的解析的时候有讲过买房子的事情,有讲过买房子的事情,今天我又以这个话题来讲一下外观模式。
就是我们去买房的时候不可能每个环节都去跑,比如建造房子和联系贷款人员办理贷款,和查征信这些东西。我们只需要一切的沟通和房产销售沟通就行了。房产中介去安排贷款,去督促承建者去建设房子。
角色分类:
子系统:房子承建者,办理贷款的银行人员
外观类:房产销售
外部调用者:买房子的人
房子的承建者的代码

//.h文件#import <Foundation/Foundation.h>@interface BuildPerson : NSObject/* *建设房子 *
/-(void)buildHouse;@end
//.m文件#import "BuildPerson.h"@implementation BuildPerson
/* *建设房子 *
/-(void)buildHouse{    NSLog(@"建设房子");}@end

银行的贷款人员的代码

//.h文件#import <Foundation/Foundation.h>@interface BankPerson : NSObject/* *面签 *
/-(void)visaInterview;
/* *检查征信 */-(BOOL)checkCredit;
/* *检查银行流水 *
/-(BOOL)checkAccountStatement;
/* *放款 *
/-(BOOL)transactionLoans;
/* *检查购房资格 *
/-(BOOL)checkHousePurchaseQualification;@end//.m文件#import "BankPerson.h"@implementation BankPerson
/* *面签 *
/-(void)visaInterview{    NSLog(@"面签");}
/* *检查购房资格 */-(BOOL)checkHousePurchaseQualification{    NSLog(@"检查购房资格");    return YES;}
/* *检查征信 */-(BOOL)checkCredit{    NSLog(@"检查征信");    return YES;}
/* *检查银行流水 */-(BOOL)checkAccountStatement{    NSLog(@"检查银行流水");    return YES;}
/* *放款 */-(BOOL)transactionLoans{    NSLog(@"放款");    return YES;}@end
  • 房产销售人员的代码
//.h文件#import <Foundation/Foundation.h>@interface MarketPerson : NSObject/* *贷款买房 *
/-(void)loansToBuyHuose;
/* *全款买房 *
/-(void)totalPaymentToBuyHuose;@end
//.m文件#import "MarketPerson.h"#import "BuildPerson.h"#import "BankPerson.h"@interface MarketPerson ()@property(nonatomic,strong)BuildPerson *buildPerson;@property(nonatomic,strong)BankPerson *bankPerson;@end@implementation MarketPerson- (instancetype)init{    self = [super init];    if (self) {        _buildPerson =[[BuildPerson alloc]init];        _bankPerson = [[BankPerson alloc]init];    }    return self;}
/* *贷款买房 *
/-(void)loansToBuyHuose{   
//第一步面签    [_bankPerson visaInterview];   
//第二步先检查购房资格     [_bankPerson checkHousePurchaseQualification];   
//第三步检查征信    [_bankPerson checkCredit];   
//第四步检查银行流水    [_bankPerson checkAccountStatement];   
//第五步放款    BOOL isYes = [_bankPerson transactionLoans];   
//第六步是否申请贷款成功    if (isYes) {        [_buildPerson buildHouse];    }else{        NSLog(@"资格审核没通过,不能买房");    }}
/* *全款买房 *
/-(void)totalPaymentToBuyHuose{   
//不需要贷款直接把钱给开发商建造房子    [_buildPerson buildHouse];}@end
  • 买房子的人:
//.h文件@interface BuyHouse : NSObject/* *买房子 *
/-(void)buyHuose;@end
//.m文件#import "BuyHouse.h"#import "MarketPerson.h"@implementation BuyHouse
/* *买房子 *
/-(void)buyHuose{    NSLog(@"贷款买房子");    MarketPerson *marketPerson = [[MarketPerson alloc]init];    [marketPerson loansToBuyHuose];}@end
  • 调用代码
    /**************外观模式*************************/    BuyHouse *buyHuose = [[BuyHouse alloc]init];  
  [buyHuose buyHuose];

命令行打印的结果:

2018-06-22 18:18:53.716286+0800 DesignDemo[3266:234697] 贷款买房子2018-06-22 18:18:53.716792+0800 DesignDemo[3266:234697] 面签
2018-06-22 18:18:53.716914+0800 DesignDemo[3266:234697] 检查购房资格
2018-06-22 18:18:53.717077+0800 DesignDemo[3266:234697] 检查征信
2018-06-22 18:18:53.717220+0800 DesignDemo[3266:234697] 检查银行流水
2018-06-22 18:18:53.717348+0800 DesignDemo[3266:234697] 放款
2018-06-22 18:18:53.717522+0800 DesignDemo[3266:234697] 建设房子

优缺点

(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。百度百科

总结

如果有写的不正确或者侵权的,希望大家给我提出来,我会及时修改。谢谢大家。

【转载】原文地址:https://blog.csdn.net/u014644610/article/details/80777284









1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马