iOS设计模式 - 生成器
原理图
说明
生成器模式可以理解为零部件组装工厂,与工厂方法是非常相似的!
源码
https://github.com/YouXianMing/iOS-Design-Patterns
//
// VehicleBuilder.h
// BuilderPattern
//
// Created by YouXianMing on 15/8/18.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "VehicleBuilderProtocol.h"
@interface VehicleBuilder : NSObject <VehicleBuilderProtocol>
/**
* 车辆信息
*/
@property (nonatomic, strong) NSMutableDictionary *vehicleInfo;
@end
//
// VehicleBuilder.m
// BuilderPattern
//
// Created by YouXianMing on 15/8/18.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "VehicleBuilder.h"
@implementation VehicleBuilder
- (instancetype)init {
self = [super init];
if (self) {
self.vehicleInfo = [NSMutableDictionary dictionary];
}
return self;
}
- (void)buildVehicleChassis {
[NSException raise:NSInternalInconsistencyException
format:@"对不起,您不能直接调用 '%@ %d' 中的方法 '%@',您需要通过继承其子类,在子类中重载该方法",
[NSString stringWithUTF8String:__FILE__].lastPathComponent, __LINE__, NSStringFromSelector(_cmd)];
}
- (void)buildVehicleEngine {
[NSException raise:NSInternalInconsistencyException
format:@"对不起,您不能直接调用 '%@ %d' 中的方法 '%@',您需要通过继承其子类,在子类中重载该方法",
[NSString stringWithUTF8String:__FILE__].lastPathComponent, __LINE__, NSStringFromSelector(_cmd)];
}
- (void)buildVehicleWheels {
[NSException raise:NSInternalInconsistencyException
format:@"对不起,您不能直接调用 '%@ %d' 中的方法 '%@',您需要通过继承其子类,在子类中重载该方法",
[NSString stringWithUTF8String:__FILE__].lastPathComponent, __LINE__, NSStringFromSelector(_cmd)];
}
- (void)buildVehicleDoors {
[NSException raise:NSInternalInconsistencyException
format:@"对不起,您不能直接调用 '%@ %d' 中的方法 '%@',您需要通过继承其子类,在子类中重载该方法",
[NSString stringWithUTF8String:__FILE__].lastPathComponent, __LINE__, NSStringFromSelector(_cmd)];
}
@end
//
// VehicleBuilderProtocol.h
// BuilderPattern
//
// Created by YouXianMing on 15/8/18.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol VehicleBuilderProtocol <NSObject>
@required
/**
* 制造汽车底盘
*/
- (void)buildVehicleChassis;
/**
* 制造汽车引擎
*/
- (void)buildVehicleEngine;
/**
* 制造汽车轮子
*/
- (void)buildVehicleWheels;
/**
* 制造汽车车门
*/
- (void)buildVehicleDoors;
@end
//
// VehicleAssemblyPlant.h
// BuilderPattern
//
// Created by YouXianMing on 15/8/18.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "VehicleBuilder.h"
/**
* 车辆装配工厂
*/
@interface VehicleAssemblyPlant : NSObject
/**
* 组装车辆
*
* @param vehicleBuilder 组装方案
*
* @return 组装好的车辆
*/
+ (VehicleBuilder *)vehicleAssembly:(VehicleBuilder *)vehicleBuilder;
@end
//
// VehicleAssemblyPlant.m
// BuilderPattern
//
// Created by YouXianMing on 15/8/18.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "VehicleAssemblyPlant.h"
@implementation VehicleAssemblyPlant
+ (VehicleBuilder *)vehicleAssembly:(VehicleBuilder *)vehicleBuilder {
[vehicleBuilder buildVehicleChassis];
[vehicleBuilder buildVehicleDoors];
[vehicleBuilder buildVehicleEngine];
[vehicleBuilder buildVehicleWheels];
return vehicleBuilder;
}
@end
细节