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

    分析

    关系伦理图

     

  • 相关阅读:
    python通过帐号和密码访问mysql
    pyqt5简单登陆界面
    PyQt5点击按钮产生新窗体
    ubuntu访问win10下的磁盘
    python平均值和加权平均值
    牛顿迭代法求高次方程的根
    运用模逆运算(同余方程)来解决Matlab课上的一道思考题
    线程实现方式与临界区保护
    线程调度的问题:Lock Convoy(锁封护)与Priority Inversion(优先级反转)
    C++ lvalue,prvalue,xvalue,glvalue和rvalue详解(from cppreference)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4808120.html
Copyright © 2011-2022 走看看