ios大话设计模式-建造者模式

10 篇文章 0 订阅
7 篇文章 0 订阅

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.csdn.net/detail/sz457763638/9621090

码字不容易希望大家多多支持点个赞。。谢谢thx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值