(八)大话设计模式 -建造者模式Builder(生成器模式)(iOS版)

介绍

什么是构建者模式

创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使
得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。

适用场景:

隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果
多个部件都可以装配到一个对象中,但产生的运行结果不相同
产品类非常复杂或者产品类因为调用顺序不同而产生不同作用
初始化一个对象时,参数过多,或者很多参数具有默认值
Builder模式不适合创建差异性很大的产品类
产品内部变化复杂,会导致需要定义很多具体建造者类实现变化,增加项目中类的数量,增加系统的理解难度和运行成本
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;

主要作用

在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。

用户只需要给出指定复杂对象的类型和内容;
建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)

** 解决的问题**

方便用户创建复杂的对象(不需要知道实现过程)
代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)

代码实现

代码核心

     建造者模式
     三个核心角色:一个策划(Director) 一个程序员(Builder) 一个产品(Product)
     核心思维:一个产品经理策划指导程序员要做一个xxApp产品

WeChatApp产品对象
简单的用字符代替功能模块

#import 

NS_ASSUME_NONNULL_BEGIN

@interface WeChatApp : NSObject

@property (strong,nonatomic) NSMutableArray *function;

-(void)showFunctions;

@end

NS_ASSUME_NONNULL_END
#import "WeChatApp.h"

@implementation WeChatApp

-(void)showFunctions {
    NSLog(@"这是App的所有功能:");
    for (NSString *f in self.function) {
        NSLog(@"%@",f);
    }
}

-(NSMutableArray *)function {
    if (!_function) {
        _function = [[NSMutableArray alloc] init];
    }
    return _function;
}

@end

Programmer(程序员)
程序员可以开发各种功能的App,只有你想不到,没有程序员做不到

#import 
#import "WeChatApp.h"
NS_ASSUME_NONNULL_BEGIN

//程序员 可以开发各种各样的功能
@interface Programmer : NSObject

-(void)buildModuleLogin;//构造登录模块
-(void)buildModuleIM;//构造IM模块
-(void)buildModuleContact;//通讯录模块
-(void)buildModuleDiscovery;//发现模块
//...more module

-(WeChatApp *)createWXApp;//完成一款App

@end

NS_ASSUME_NONNULL_END
#import "Programmer.h"

@interface Programmer ()

@property (nonatomic,strong) WeChatApp *app;

@end

@implementation Programmer

-(instancetype)init {
    if (self = [super init]) {
        self.app = [[WeChatApp alloc] init];//程序员搭建产品基础框架 (无任何功能)
    }
    return self;
}

//构造登录模块
-(void)buildModuleLogin {
    [self.app.function addObject:@"新增功能模块:登录模块"];
}
//构造IM模块
-(void)buildModuleIM {
    [self.app.function addObject:@"新增功能模块:IM模块"];
}
//通讯录模块
-(void)buildModuleContact {
    [self.app.function addObject:@"新增功能模块:联系人模块"];
}
//发现模块
-(void)buildModuleDiscovery {
    [self.app.function addObject:@"新增功能模块:发现模块"];
}


//完成一款App
-(WeChatApp *)createWXApp {
    return self.app;
}


@end

Director(产品经理/策划)
给产品经理一个程序员,就能做一款产品出来(最苦逼的还是程序员)

#import 
#import "Programmer.h"
#import "WeChatApp.h"
NS_ASSUME_NONNULL_BEGIN

@interface Director : NSObject

//给产品经理一个程序员,做一款产品出来
-(WeChatApp *)createWeChatAppWithProgrammer:(Programmer *)builder;

//如果要做其他产品 可以在这里扩展新的方法 原理同上

@end

NS_ASSUME_NONNULL_END
#import "Director.h"

@implementation Director

/*
 策划可以调整程序员模块开发的顺序 可以选择砍掉某些模块 或者新增某些需求
 */
-(WeChatApp *)createWeChatAppWithProgrammer:(Programmer *)builder {
    [builder buildModuleLogin];
    [builder buildModuleContact];
    [builder buildModuleIM];//新增需求
//    [builder buildModuleDiscovery];//砍掉需求
    return [builder createWXApp];
}

@end

准备研发App

   /*
     建造者模式
     三个核心角色:一个策划(Director) 一个程序员(Builder) 一个产品(Product)
     核心思维:一个产品策划指导程序员要做一个xxApp产品
     */
    Director *director = [[Director alloc] init];//产品经理
    Programmer *coder = [[Programmer alloc] init];//程序员
    WeChatApp *app = [director createWeChatAppWithProgrammer:coder];//产品经理策划程序员做一个App(具体做的细节在createWeChatAppWithProgrammer内部执行)
    [app showFunctions];
2019-03-23 14:20:41.725363+0800 DesignModeDemo[36277:759202] 这是App的所有功能:
2019-03-23 14:20:41.725569+0800 DesignModeDemo[36277:759202] 新增功能模块:登录模块
2019-03-23 14:20:41.725743+0800 DesignModeDemo[36277:759202] 新增功能模块:联系人模块
2019-03-23 14:20:41.725953+0800 DesignModeDemo[36277:759202] 新增功能模块:IM模块

你可能感兴趣的:((八)大话设计模式 -建造者模式Builder(生成器模式)(iOS版))