zoukankan      html  css  js  c++  java
  • iOS设计模式

    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

    细节

  • 相关阅读:
    BZOJ2208 [Jsoi2010]连通数[缩点/Floyd传递闭包+bitset优化]
    loj515 「LibreOJ β Round #2」贪心只能过样例[bitset+bool背包]
    BZOJ3331 [BeiJing2013]压力[圆方树+树上差分]
    BZOJ4010 [HNOI2015]菜肴制作[拓扑排序+贪心]
    BZOJ2140 稳定婚姻[强连通分量]
    hdu4612 Warm up[边双连通分量缩点+树的直径]
    BZOJ2730 [HNOI2012]矿场搭建[点双连通分量]
    BZOJ3887 [Usaco2015 Jan]Grass Cownoisseur[缩点]
    BZOJ1016 [JSOI2008]最小生成树计数[最小生成树+搜索]
    hdu4786 Fibonacci Tree[最小生成树]【结论题】
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4740407.html
Copyright © 2011-2022 走看看