iOS设计模式 - 生成器
iOS设计模式 - 生成器

原理图

说明
生成器模式可以理解为零部件组装工厂,与工厂方法是非常相似的!
// // 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
细节

如果我的内容能对你有所帮助,我就很开心啦!

浙公网安备 33010602011771号