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

分析

关系伦理图


目录
相关文章
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
304 0
|
设计模式 搜索推荐 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
560 1
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
|
25天前
|
设计模式 Java
「全网最细 + 实战源码案例」设计模式——生成器模式
生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象。它允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化细节。该模式特别适合构建具有多种配置的复杂对象。其结构包括抽象建造者、具体建造者、指挥者和产品角色。适用于需要创建复杂对象且对象由多个部分组成、构造过程需对外隐藏或分离表示与构造的场景。优点在于更好的控制、代码复用和解耦性;缺点是增加复杂性和不适合简单对象。实现时需定义建造者接口、具体建造者类、指挥者类及产品类。链式调用是常见应用方式之一。
53 12
|
6月前
|
设计模式 项目管理
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
|
7月前
|
C++ 设计模式
iLogtail设计模式问题之生成器模式的Product(产品)角色是什么
iLogtail设计模式问题之生成器模式的Product(产品)角色是什么
|
8月前
|
设计模式 算法 索引
程序技术好文:设计模式之美:Builder(生成器)
程序技术好文:设计模式之美:Builder(生成器)
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
475 0
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
331 0
|
设计模式 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
306 0
|
设计模式 iOS开发 UED
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)
288 0

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    「全网最细 + 实战源码案例」设计模式——享元模式
  • 6
    「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
  • 7
    「全网最细 + 实战源码案例」设计模式——组合模式
  • 8
    「全网最细 + 实战源码案例」设计模式——代理模式
  • 9
    「全网最细 + 实战源码案例」设计模式——适配器模式
  • 10
    「全网最细 + 实战源码案例」设计模式——抽象工厂模式