ios建造者模式
本质:
将一个复杂对象的构建与他的表示分离,
使得同样的构建过程创建不同的表示。
解释:
**请反复多度几遍,理解的写的不是按照书上照抄**
同样的构建过程可以创建不同的表现,
构建过程需要独立出来,这里的构建过程我们称为指导者,
而生成器是可以被切换的具体实现,
在ios中我们可以用一个协议替代生成器,
遵守这个协议的对象就是生成器生成的对象。
一句话记住: 同一指导者不同生成器就可以生产不同的产品来
指导者有两个主要的方法
a.初始化方法 根据生成器具体的对象来初始化
b.暴漏对应的buildxx方法 方法里是对应的构建过程
我们以一个人为例子
先定义人的指导者
a.initWithBuilder:生成器对象
b.buildPerson 构建过程的封装方法调用
再定义生成器
iOS 用协议 规范 (继承表示也可,不过协议方便)
protocol 生成器
build head
build body
build foot
生成器生成具体的生成器对象 xxxbuilder
thinPersonBuilder
fatPersonBuilder
由于遵守了协议
在对应.m文件就是相关对象的具体表示了
代码如下
PersonBuilderProtocol.h
#import <Foundation/Foundation.h>
@protocol PersonBuilderProtocol <NSObject>
-(void)buildHeader;
-(void)buildBody;
-(void)buildFeat;
@end
#import "ThinPersonBuilder.h"
@implementation ThinPersonBuilder
-(void)buildBody
{
NSLog(@"thin%s",__func__);
}
-(void)buildHeader
{
NSLog(@"thin%s",__func__);
}
-(void)buildFeat
{
NSLog(@"thin%s",__func__);
}
#import "FatPersonBuilder.h"
@implementation FatPersonBuilder
-(void)buildBody
{
NSLog(@"fat%s",__func__);
}
-(void)buildHeader
{
NSLog(@"fat%s",__func__);
}
-(void)buildFeat
{
NSLog(@"fat%s",__func__);
}
@end
PersonDirector
#import <Foundation/Foundation.h>
#import "PersonBuilderProtocol.h"
@interface PersonDirector : NSObject
-(instancetype)initWithPersonBuilder:(id<PersonBuilderProtocol>)builder;
-(void)buildPerson;
@end
#import "PersonDirector.h"
@interface PersonDirector ()
@property(nonatomic, weak) id <PersonBuilderProtocol> builder;
@end
@implementation PersonDirector
-(instancetype)initWithPersonBuilder:(id<PersonBuilderProtocol>)builder
{
if (self==[super init]) {
_builder = builder;
}
return self;
}
-(void)buildPerson
{
[self.builder buildHeader];
[self.builder buildBody];
[self.builder buildFeat];
}
具体调用
ThinBuilder* thinBuilder = [[ThinBuilder alloc] init];
PersonDirector* thinDirector = [[PersonDirector alloc] initWithPersonBuilder:thinBuilder];
[thinDirector buildPerson];
FatBuilder* fatBuilder = [[FatBuilder alloc] init];
PersonDirector* fatDirector = [[PersonDirector alloc] initWithPersonBuilder:fatBuilder];
[fatDirector buildPerson];
2016-09-03 22:04:40.402 01-builder模式[3970:40414] thin-[ThinBuilder buildHeader]
2016-09-03 22:04:40.403 01-builder模式[3970:40414] thin-[ThinBuilder buildBody]
2016-09-03 22:04:40.403 01-builder模式[3970:40414] thin-[ThinBuilder buildFeat]
2016-09-03 22:04:40.403 01-builder模式[3970:40414] fat-[FatBuilder buildHeader]
2016-09-03 22:04:40.403 01-builder模式[3970:40414] fat-[FatBuilder buildBody]
2016-09-03 22:04:40.403 01-builder模式[3970:40414] fat-[FatBuilder buildFeat]
demo地址
http://download.youkuaiyun.com/detail/sz457763638/9621090
码字不容易希望大家多多支持点个赞。。谢谢thx