標籤:
iOS設計模式 - 產生器
原理圖
說明
1. 將構建複雜物件的過程拆分成一個一個的模組,通過統一的指導者來指導對象的構建過程稱之為產生器模式
2. 產生器模式適合用於構建組合的對象
源碼
https://github.com/YouXianMing/BuilderPattern
//// CarBuilder.h// BuilderPattern//// Created by YouXianMing on 15/9/14.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import <Foundation/Foundation.h>@interface CarBuilder : NSObject { NSMutableDictionary *_carInfo;}/** * 汽車資訊 */@property (nonatomic, strong, readonly) NSDictionary *car;/** * 建造輪子 */- (void)buildWheel;/** * 建造引擎 */- (void)buildEngine;/** * 構造外殼 */- (void)buildShell;@end
//// CarBuilder.m// BuilderPattern//// Created by YouXianMing on 15/9/14.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "CarBuilder.h"@interface CarBuilder ()@end@implementation CarBuilder- (instancetype)init { self = [super init]; if (self) { _carInfo = [[NSMutableDictionary alloc] init]; } return self;}- (void)buildWheel { _carInfo[@"wheel"] = @"normal_wheel";}- (void)buildEngine { _carInfo[@"engine"] = @"normal_engine";}- (void)buildShell { _carInfo[@"shell"] = @"normal_shell";}@synthesize car = _car;- (NSDictionary *)car { return [[NSDictionary alloc] initWithDictionary:_carInfo];}@end
//// BMWBuilder.h// BuilderPattern//// Created by YouXianMing on 15/9/14.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "CarBuilder.h"@interface BMWBuilder : CarBuilder@end
//// BMWBuilder.m// BuilderPattern//// Created by YouXianMing on 15/9/14.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "BMWBuilder.h"@implementation BMWBuilder- (void)buildWheel { _carInfo[@"wheel"] = @"BMO_wheel";}- (void)buildEngine { _carInfo[@"engine"] = @"BMO_engine";}- (void)buildShell { _carInfo[@"shell"] = @"BMO_shell";}@end
//// ViewController.m// BuilderPattern//// Created by YouXianMing on 15/9/14.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "CarBuilder.h"#import "BMWBuilder.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; CarBuilder *builder = [[CarBuilder alloc] init]; [builder buildEngine]; [builder buildShell]; [builder buildWheel]; NSLog(@"%@", builder.car); CarBuilder *bmwBuilder = [[BMWBuilder alloc] init]; [bmwBuilder buildEngine]; [bmwBuilder buildShell]; [bmwBuilder buildWheel]; NSLog(@"%@", bmwBuilder.car);}@end
分析
關係倫理圖
iOS設計模式 - 產生器