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

    iOS设计模式 - 生成器

    原理图

    说明

    1. 将构建复杂对象的过程拆分成一个一个的模块,通过统一的指导者来指导对象的构建过程称之为生成器模式

    2. 生成器模式适合用于构建组合的对象

    源码

    https://github.com/YouXianMing/iOS-Design-Patterns

    //
    //  CarBuilder.h
    //  BuilderPattern
    //
    //  Created by YouXianMing on 15/9/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface CarBuilder : NSObject {
        
        NSMutableDictionary *_carInfo;
    }
    
    /**
     *  汽车信息
     */
    @property (nonatomic, strong, readonly) NSDictionary *car;
    
    /**
     *  建造轮子
     */
    - (void)buildWheel;
    
    /**
     *  建造引擎
     */
    - (void)buildEngine;
    
    /**
     *  构造外壳
     */
    - (void)buildShell;
    
    @end
    //
    //  CarBuilder.m
    //  BuilderPattern
    //
    //  Created by YouXianMing on 15/9/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "CarBuilder.h"
    
    @interface CarBuilder ()
    
    @end
    
    @implementation CarBuilder
    
    - (instancetype)init {
        
        self = [super init];
        if (self) {
            
            _carInfo = [[NSMutableDictionary alloc] init];
        }
        return self;
    }
    
    - (void)buildWheel {
    
        _carInfo[@"wheel"] = @"normal_wheel";
    }
    
    - (void)buildEngine {
    
        _carInfo[@"engine"] = @"normal_engine";
    }
    
    - (void)buildShell {
    
        _carInfo[@"shell"] = @"normal_shell";
    }
    
    @synthesize car = _car;
    - (NSDictionary *)car {
    
        return [[NSDictionary alloc] initWithDictionary:_carInfo];
    }
    
    @end
    //
    //  BMWBuilder.h
    //  BuilderPattern
    //
    //  Created by YouXianMing on 15/9/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "CarBuilder.h"
    
    @interface BMWBuilder : CarBuilder
    
    @end
    //
    //  BMWBuilder.m
    //  BuilderPattern
    //
    //  Created by YouXianMing on 15/9/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "BMWBuilder.h"
    
    @implementation BMWBuilder
    
    - (void)buildWheel {
        
        _carInfo[@"wheel"] = @"BMO_wheel";
    }
    
    - (void)buildEngine {
        
        _carInfo[@"engine"] = @"BMO_engine";
    }
    
    - (void)buildShell {
        
        _carInfo[@"shell"] = @"BMO_shell";
    }
    
    @end
    //
    //  ViewController.m
    //  BuilderPattern
    //
    //  Created by YouXianMing on 15/9/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "CarBuilder.h"
    #import "BMWBuilder.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        CarBuilder *builder = [[CarBuilder alloc] init];
        [builder buildEngine];
        [builder buildShell];
        [builder buildWheel];
        NSLog(@"%@", builder.car);
        
        CarBuilder *bmwBuilder = [[BMWBuilder alloc] init];
        [bmwBuilder buildEngine];
        [bmwBuilder buildShell];
        [bmwBuilder buildWheel];
        NSLog(@"%@", bmwBuilder.car);
    }
    
    @end

    分析

    关系伦理图

     

  • 相关阅读:
    输入adb shell 时 提示error: more than one device and emulator
    增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略
    Android音乐编程:管理音频焦点
    Android MediaScanner 详尽分析
    MediaScanner与音乐信息扫描==
    Vold工作流程分析学习
    [LeetCode] Majority Element II
    Android 四大组件学习之ContentProvider五
    HDU 1171 Big Event in HDU(01背包)
    Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4808120.html
Copyright © 2011-2022 走看看