文档章节

学习设计模式——生成器模式

江左煤郎
 江左煤郎
发布于 2018/10/16 23:24
字数 962
阅读 12
收藏 0

1. 认识生成器模式

    1. 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    2. 组成:

  • Builder:生成器接口,定义创建一个Product对象所需要的各个组件的操作,并且如何将各个组件装配到Product对象中
  • BuilderImpl:生成器实现类,实现各个部件的创建,并负责组装Product对象所需要的各个组件,同时提供一个让用户获取组装完成后的对象的方法。
  • Director:指导者,主要用于使用Builder接口,以一个统一的过程来构建一个所需要的Product对象,也就是说该部分负责Product对象的构造过程,只知道按照步骤调用Builder接口中生成并装配每个部件的方法。
  • Product:产品,表示被生成器构建的复杂对象,包含多个部件

    3. 参考代码实现:

public class Product {
	//定义产品中的一些操作或者变量
	
}
/**
 * @ClassName:Builder
 * @Description:定义用来创建部件的方法
 */
public interface Builder {
	//示意方法,构建某个部件
	public void buildPart();
}
/**
 * @ClassName:BuilderImpl
 * @Description:生成器的具体实现类
 */
/**
 * @ClassName:BuilderImpl
 * @Description:生成器的具体实现类
 */
public class BuilderImpl implements Builder {
	//生成器最终生成的对象
	private Product product=new Product();
	//将生成的对象返回给外界使用
	public Product getProduct(){
		return product;
	}
	//构建部件
	@Override
	public void buildPart() {
		
	}

}

/**
 * @ClassName:Director
 * @Description:指导使用构建器的接口来构建所需要的Product对象
 */
public class Director {
	//持有所需的builder
	private Builder builder;
	public Director(Builder builder){
		this.builder=builder;
	}
	//示意方法,指导使用构建器的接口来构建所需要的Product对象
	public void construct(){
		builder.buildPart();
	}
}
public class Client {
	public static void main(String[] args) {
		//创建生成器对象
		BuilderImpl builder=new BuilderImpl();
		Director d=new Director(builder);
		//通过指导器进行创建
		d.construct();
		//获取创建的对象
		Product p=builder.getProduct();
	}
}

2. 理解生成器模式

    1. 功能:用于构建复杂的对象,而且是将负责对象的构建分成了几个步骤模块,而且这个构建的过程是不变的、统一的,变化的部分在生成器中进行处理,同样的构建过程,在不同的生成器中就会构建不同的复杂对象。也就是说,生成器的重点在于分离复杂对象的构建过程与具体构建的实现,使得构建过程可以重复利用,而构建具体实现可以进行扩展和切换,从而灵活组合出不同的复杂对象。

    2. 生成器的实现:在生成器的每个构建方法中,都分为两部分功能,一部分是生成组件,另一部分是装配组件。在生成组件对象时,可以和工厂模式组合使用。

    3. 指导者的实现:指导者承担的是整体的构建过程,或者是构建算法,是一个统一不变的部分,指导者的实现并不是参考代码中的那么简单,仅仅按顺序调用方法,而是会有复杂的算法过程,在运算过程中根据需要来调用生成器的方法来创建部件对象。

    4. 优点:松散了程序的耦合度,可以很容易改变Product的内部表示,并且具有更好的复用性

    5. 本质:分离整体构建算法和部件构造

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
江左煤郎
粉丝 26
博文 86
码字总数 220642
作品 0
西安
后端工程师
私信 提问
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
设计模式笔录(二),设计模式有哪些

本人出道5年,学习、编程、再学习、再编程一路走过,只是在笔和纸留下些脚印,实感惭愧。现开始把自己学习到的心得,实践中的体会,一一贴在互联网上,大家互相学习、探讨,寻找一些技术朋友...

方旭
2011/03/31
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
JavaScript设计模式入坑

JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...

小小小8021
2018/10/18
0
0
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linux-tao
39分钟前
0
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
今天
9
0
OSChina 周日乱弹 —— 没时间 没头发 但有钱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @开源中国总经办主任 :分享齐一的单曲《这个年纪》 《这个年纪》- 齐一 手机党少年们想听歌,请使劲儿戳(这里) @肿肿卷 :我真的可以睡一天...

小小编辑
今天
90
6
Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
3
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部