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设计模式 - 生成器的更多相关文章

  1. iOS设计模式之生成器

    iOS设计模式之生成器 1.生成器模式的定义 (1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示 (2): 生成器模式除了客户之外还包括一个Director(指导者) ...

  2. iOS书摘之Objective-C编程之道 iOS设计模式解析

    来自<Objective-C编程之道iOS设计模式解析>一书的摘要总结 一.Prototype 原型模式 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象.(<设 ...

  3. IOS设计模式之一(MVC模式,单例模式)

    iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不 ...

  4. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  5. IOS设计模式之三:MVC模式

    IOS设计模式之三:MVC模式   模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团 ...

  6. iOS设计模式 - 享元

    iOS设计模式 - 享元 原理图 说明 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件.通常物件中的部分 ...

  7. iOS设计模式 - 责任链

    iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

  8. iOS设计模式 - 模板

    iOS设计模式 - 模板 原理图 说明 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 源码 https://github.c ...

  9. iOS设计模式 - 访问者

    iOS设计模式 - 访问者 原理图 说明 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 1.Visitor 抽象访问者角色,为该对象结构中具 ...

随机推荐

  1. ActiveMQ发布-订阅消息模式

    一.订阅杂志我们很多人都订过杂志,其过程很简单.只要告诉邮局我们所要订的杂志名.投递的地址,付了钱就OK.出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中.这样我们就可以看 ...

  2. Go 开发

    0.参数传递永远是值传递,地址也是一种值 1.go 开发环境的配置 2.import 包的几种形式: 1)_,默认导入一个包时,会将包中内容导入再执行包中的init()方法,有时并不需要某个包,只是想 ...

  3. Node.js http服务器搭建和发送http的get、post请求

    1.Node.js 搭建http服务器 1.1创建server.js var http = require('http'); var querystring = require('querystrin ...

  4. 任务四十一:UI组件之日历组件(二)

    任务四十一:UI组件之日历组件(二) 面向人群: 有一定基础的同学 难度: 中 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容的质量以及学 ...

  5. [转]ASP.NET cache缓存的用法

    本文转自:https://blog.csdn.net/mss359681091/article/details/51076712 本文导读:在.NET运用中经常用到缓存(Cache)对象.有HttpC ...

  6. [转]ASP.NET Core配置环境变量和启动设置

    本文转自:https://www.cnblogs.com/tdfblog/p/Environments-LaunchSettings-in-Asp-Net-Core.html 在这一部分内容中,我们来 ...

  7. 14、通过jpa往数据库插数据

    这是接着上一篇写的,在上一篇的基础上添加 Controller @RestController public class HelloController { @Resource private Hel ...

  8. 基于socket的简单p2p聊天项目

    https://blog.csdn.net/Jacky_Can/article/details/74984822 https://blog.csdn.net/qq_20889581/article/d ...

  9. ef oracle参数化问题

    并非所有变量都已绑定 假如一个sql是这样的 string sql =@" select id from a where date between :StartDate and :EndDa ...

  10. Bash:常用命令工具-tr命令

    tr命令可以用来做简单的字符替换与删除,常用的有-d, -s选项.它的替换与删除是按单个字符来的 假设有以下文本: Read from the file words.txt and output th ...