美文网首页
建造者模式(Builder)(生成器)

建造者模式(Builder)(生成器)

作者: 傻傻小萝卜 | 来源:发表于2017-04-17 17:24 被阅读28次

基本概念

建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者主要是用来创建一些复杂的对象,这些对象内部构造间的建造顺序通常是稳定,但是对象内部的构造通常是面临着复杂的变化。

1 Builder:为创建一个产品对象的各个部件指定抽象接口。

2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。

3 Director:构造一个使用Builder接口的对象。

4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

Product,一种产品,它具有多个复杂的部件

@interface Product : NSObject

@property (nonatomic, strong)NSMutableArray *partArray;// 部件数组

- (void)addPart:(NSString *)partString;// 添加部件

- (void)show;// 展示所有部件

@end

#import "Product.h"

@implementation Product

- (instancetype)init

{

self = [super init];

if (self) {

self.partArray = [NSMutableArray array];

}

return self;

}

- (void)addPart:(NSString *)partString

{

[self.partArray addObject:partString];

}

- (void)show

{

NSLog(@"产品创建----");

for (NSString *part in self.partArray) {

NSLog(@"%@",part);

}

}

@end

Builder:抽象的建造类,他将产品Product 分为两个建造过程PartA和PartB,并得到最终的产品getResult

@interface Builder : NSObject

@property (nonatomic, strong)Product *product;

- (void)buildPartA;

- (void)buildPartB;

- (Product *)getResult;

@end

建造类1:产品的第一种建造工艺

@implementation ConcreteBuilder1

- (instancetype)init

{

self = [super init];

if (self) {

self.product = [[Product alloc] init];

}

return self;

}

- (void)buildPartA

{

[self.product addPart:@"Part A"];

}

- (void)buildPartB

{

[self.product addPart:@"Part B"];

}

- (Product *)getResult

{

return self.product;

}

@end

建造类2:产品的第二种建造工艺

#import "ConcreteBuilder2.h"

@implementation ConcreteBuilder2

- (instancetype)init

{

self = [super init];

if (self) {

self.product = [[Product alloc] init];

}

return self;

}

- (void)buildPartA

{

[self.product addPart:@"部件 1"];

}

- (void)buildPartB

{

[self.product addPart:@"部件 2"];

}

- (Product *)getResult

{

return self.product;

}

@end

Director类:指挥类,要求产品是第一种建造工艺还是第二种建造工艺

@interface Director : NSObject

- (void)constructWithBuilder:(Builder *)builder;

@end

#import "Director.h"

@implementation Director

- (instancetype)init

{

self = [super init];

if (self) {

}

return self;

}

- (void)constructWithBuilder:(Builder *)builder

{

[builder buildPartA];

[builder buildPartB];

}

@end

客户端实现:

(1)第一种工艺

Director *director = [[Director alloc]init];// 创建指挥者

Builder *b1 = [[ConcreteBuilder1 alloc] init];

[director constructWithBuilder:b1];

Product *p1 = [b1 getResult];

[p1 show];

输出结果

2017-04-17 17:08:01.488 简单工厂——01[41833:300289] 产品创建----

2017-04-17 17:08:01.488 简单工厂——01[41833:300289] Part A

2017-04-17 17:08:01.488 简单工厂——01[41833:300289] Part B

(2)第二种工艺

Director *director = [[Director alloc]init];// 创建指挥者

Builder *b2 = [[ConcreteBuilder2 alloc] init];

[director constructWithBuilder:b2];

Product *p2 = [b2 getResult];

[p2 show];

输出结果

2017-04-17 17:22:28.405 简单工厂——01[42029:310980] 产品创建----

2017-04-17 17:22:28.405 简单工厂——01[42029:310980] 部件 1

2017-04-17 17:22:28.405 简单工厂——01[42029:310980] 部件 2

相关文章

  • 设计模式之建造者模式

    建造者模式的定义   建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:  Separat...

  • 建造者模式

    建造者模式的定义 建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:Separate th...

  • Android 中的建造者模式

    Android 中的建造者模式 概述 建造者模式(Builder Pattern)也叫生成器模式,其定义如下:se...

  • 设计模式-构建者模式

    概念 建造者模式(英:Builder Pattern)是一种创建型设计模式,又名:生成器模式。GOF 给建造者模式...

  • 《设计模式之禅》读书笔记-2.5-建造者模式

    2.5 建造者模式 定义: Builder Pattern,也叫生成器模式Separate the constru...

  • 建造者模式——不止提高代码逼格

    简介 Builder Pattern,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。 建造者模式是一种...

  • 建造者模式(2)-原理类图

    建造者模式介绍 建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的...

  • 建造者模式

    建造者模式的定义 建造者模式(Builder Pattern)也叫做生成器模式,其定义如下 (将一个复杂对象的构建...

  • 建造者模式

    建造者模式,也叫生成器模式,Builder Pattern,其英文原意为: Seperate the constr...

  • 再说设计模式-建造者模式

    定义 建造者模式(Builder Pattern)也叫做生成器模式,其定义如下: Separate the con...

网友评论

      本文标题:建造者模式(Builder)(生成器)

      本文链接:https://www.haomeiwen.com/subject/ycrwattx.html