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设计模式 - 生成器的更多相关文章
- iOS设计模式之生成器
iOS设计模式之生成器 1.生成器模式的定义 (1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示 (2): 生成器模式除了客户之外还包括一个Director(指导者) ...
- iOS书摘之Objective-C编程之道 iOS设计模式解析
来自<Objective-C编程之道iOS设计模式解析>一书的摘要总结 一.Prototype 原型模式 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象.(<设 ...
- IOS设计模式之一(MVC模式,单例模式)
iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不 ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- IOS设计模式之三:MVC模式
IOS设计模式之三:MVC模式 模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团 ...
- iOS设计模式 - 享元
iOS设计模式 - 享元 原理图 说明 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件.通常物件中的部分 ...
- iOS设计模式 - 责任链
iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...
- iOS设计模式 - 模板
iOS设计模式 - 模板 原理图 说明 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 源码 https://github.c ...
- iOS设计模式 - 访问者
iOS设计模式 - 访问者 原理图 说明 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 1.Visitor 抽象访问者角色,为该对象结构中具 ...
随机推荐
- 使用subgit进行svn迁移至git(branch,tags)
前言: 最近公司需要将整体项目从svn迁移至gitlab上,经过几天的研究,现记录一下流程 整体思路是进行一次导入: 先通过subgit将svn整个import至本地,在与git上的项目进行合并. 1 ...
- 14-hadoop-运行的2种方式
hadoop的程序运行有, 具体有3种, 除了上一篇(http://www.cnblogs.com/wenbronk/p/6662119.html)提过的直接发布jar上传到hadoop以外, 还有本 ...
- spring整合mongodb
使用spring整合mongodb maven 依赖 <dependency> <groupId>org.mongodb</groupId> <artifac ...
- lucene源码分析(8)MergeScheduler
1.使用IndexWriter.java mergeScheduler.merge(this, MergeTrigger.EXPLICIT, newMergesFound); 2.定义MergeSch ...
- Install Tomcat 6 on CentOS or RHEL --转载
source:http://www.davidghedini.com/pg/entry/install_tomcat_6_on_centos This post will cover installa ...
- SpringBoot源码分析之SpringBoot的启动过程
SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30 | 分类于 springboot | 0 Comments | 阅读次数 SpringB ...
- QlikView sheet权限
最近遇到了个新问题,需要针对不同的sheet设置不同的权限,具体是用户登录不同账户,可以看到统一文档的不同sheet 对于Qlikview权限设置就不做描述,下面直接进行sheet操作 第一步,打开脚 ...
- jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)
1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...
- leetcode实践:找出两个有序数组的中位数
题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 代码实现 package com. ...
- JVM读书笔记
1 概念 java virtual machine为java虚拟机,运行使用jdk中编译器编译的java程序. 2 JVM内存模型 程序计数器:线程私有.当前线程正在执行的行号指示器. Java虚拟机 ...