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. tomcat启动(四)Catalina分析-server的init()方法

    上一回load()方法解析讲到xml解析完成. load()内部接下来会获取server getServer().setCatalina(this); 这个server从createStartDige ...

  2. Java多态的一些陷阱

    Java多态是如何实现的? Java的多态和C++一样,是通过延时绑定(late binding)或者说运行时绑定(runtime binding)来实现的.当调用某一个对象引用的方法时,因为编译器并 ...

  3. Java并发编程笔记之ThreadLocalRandom源码分析

    JDK 并发包中 ThreadLocalRandom 类原理剖析,经常使用的随机数生成器 Random 类的原理是什么?及其局限性是什么?ThreadLocalRandom 是如何利用 ThreadL ...

  4. 短视频APP是如何开启你的美好生活的?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯视频云终端团队发表于云+社区专栏 常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ. ...

  5. CUBA China 最新进展

    各位关注CUBA平台的朋友,你们好! 距上次发布动态我们又沉默了大概两个月时间,这期间我们一直在翻译CUBA平台的文档.CUBA平台的开发文档相当丰富,所以这需要耗费较多的时间,至少比我们预想的时间要 ...

  6. MVC页面缓存

    1.OutputCache 属性 contact.cshtml    [OutputCache(Duration=10)] public ActionResult Contact()   {      ...

  7. 照猫画虎owin oauth for qq and sina

    ms随vs2013推出了mvc5,mvc5自带的模板项目中引用了新的身份认证框架 ms identity.其中owin部分实现了google,facebook,twitter等国外常见的第三方用户.可 ...

  8. sql2000-text类型数据只能看到256个字节

    工具只能看到256个字节,其实数据是完整的,可以自己写个程序取数据试一试

  9. Grunt - 安装指南

    发现周围有些人对前端存在偏见. 他们认为前端只是用没那么复杂的技术对着界面调来调去,一点点打磨,最后做出一个没什么实用价值的“花瓶”. 其实,前端的技术栈并不简单,比如我们可以用Grunt进行一些自动 ...

  10. 通过微信分享链接,后面被加上from=singlemessage&isappinstalled=1导致网页打不开

    微信分享会根据分享的不同,为原始链接拼接如下参数: 朋友圈   from=timeline&isappinstalled=0微信群   from=groupmessage&isappi ...