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

    细节

  • 相关阅读:
    接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架
    Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本
    Python 基于Python实现批量创建目录
    Loadrunner 脚本录制-通过代理录制脚本
    Clumsy 利用无线网卡结合Clumsy软件模拟弱网络测试
    Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试
    Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
    Postman Postman测试接口之POST提交本地文件数据
    Loadrunner 脚本开发-利用web_custom_request函数进行接口测试
    loadrunner 脚本开发-web_custom_request函数详细介绍
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4740407.html
Copyright © 2011-2022 走看看