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

    细节

  • 相关阅读:
    Java实体书写规范
    Mybatis配置中遇到的问题和问题分析
    Ubuntu下eclipse的Extjs提示插件安装
    Ubuntu中root用户和user用户的相互切换
    ubuntu下启动和关闭tomcat的简单方法
    Ubuntu上安装Maven Eclipse以及配置
    IE8兼容<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    心情
    更改Eclipse下Tomcat的部署目录
    Tomcat:IOException while loading persisted sessions: java.io.EOFException 解决
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4740407.html
Copyright © 2011-2022 走看看