本帖最后由 不二晨 于 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
|