ios大話設計模式-建造者模式
阿新 • • 發佈:2019-02-07
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]
碼字不容易希望大家多多支援點個贊。。謝謝thx