文档章节

【创建型】- 建造者模式

ZeroneLove
 ZeroneLove
发布于 02/19 22:36
字数 732
阅读 7
收藏 0

建造者模式


将一个对象的构建和表示分离,使得同样的构建过程可以创建不同的表示

角色

  • 抽象建造者builder:指定一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造

  • 具体建造者:实现builder接口,构建和装配产品各个部件,定义并明确它所创建的表示,提供一个返回这个产品的接口

  • 指挥者Director:构建一个使用builder接口的对象,负责管理整个产品的流程

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


指挥者角色:Director

public class Director {
	public void Build(AbstractBuilder builder){
		builder.BuilderA();
		builder.BuliderB();
	}
}

产品角色:Product

public class Product {

	List<String> list=new ArrayList<String>(); //产品的部件集合

	/**
	 * 表示配件装配过程
	 * @param partName 产品部件名称
	 */
	public void add(String partName){
		list.add(partName);
	}
	
	public void show() {
		for(String str:list){
			System.out.println(str);
		}
	}
}

抽象建造者:AbstractBuilder

public abstract class AbstractBuilder {
    
	//构建部件B
	public abstract void BuilderA();
	
	//构建部件A
	public abstract void BuliderB();
	
	//取出产品
	public abstract Product getProduct();
}

具体建造者角色:

public class ConcreteBuilderA extends AbstractBuilder {
    
	private Product product = new Product();  //构建的目标对象
	
	@Override
	public void BuilderA() {
           product.add("A建造者正在组装产品A部件.....");
	}

	@Override
	public void BuliderB() {
	       product.add("A建造者正在组装产品B部件.....");

	}

	@Override
	public Product getProduct() {  //提供返回构建的目标对象的方法
		return product;
	}
}
public class ConcreteBuilderB extends AbstractBuilder {
    
	private Product product=new Product();
	
	@Override
	public void BuilderA() {
		product.add("B建造者正在组装产品A部件.....");
	}

	@Override
	public void BuliderB() {
		product.add("B建造者正在组装产品B部件.....");
	}

	@Override
	public Product getProduct() {
		return product;
	}
}

测试代码:

Director director = new Director();  //指挥者:负责产品部件的整个生产流程

//调用A建造者生产产品
AbstractBuilder builder = new ConcreteBuilderA(); 
director.Build(builder);  //制定负责整个产品生产的建造者

Product product=builder.getProduct(); //获取建造者生产的产品
product.show();

System.out.println("-------------------");
//调用B建造者生产产品
builder = new ConcreteBuilderB();
director.Build(builder);
product = builder.getProduct();
product.show();

通俗解释

汽车厂(指挥者)准备生产某型汽车,然后将零部件变速箱(产品)下单给汽车零部件供应商A/B(建造者),然后汽车零部件供应商A/B按照汽车厂的规范组装胜场生产变速箱,最后生产的产品交给汽车厂使用

经典使用:Java fluent风格代码(Lombok @Builder注解)

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 162
码字总数 128572
作品 0
深圳
高级程序员
私信 提问
我的Java设计模式-建造者模式

在未上大学之前,一直有个梦想“I have a dream!”,就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女。咳咳~~虽然现在没实现我的dream,但梦想还是得有...

Jet啟思
2017/10/11
0
0
设计模式之禅之设计模式-建造者模式

一:建造者模式的定义 --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 ● Product产品类 通常是实...

无信不立
2016/01/04
0
0
python设计模式-建造者模式

在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建。但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生面团的厚度...

goodspeed
2017/11/12
0
0
人人都会设计模式---建造者模式--Builder

PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/300cbb9ee… 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过 2、教程...

TigerChain
2017/12/03
0
0
菜鸟成长系列-Builder 建造者模式

菜鸟成长系列-概述 菜鸟成长系列-面向对象的四大基础特性 菜鸟成长系列-多态、接口和抽象类 菜鸟成长系列-面向对象的6种设计原则 菜鸟成长系列-单例模式 菜鸟成长系列-工厂模式 什么是产品的...

2017/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基础服务系列-Centos7 安装Node.js10

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. 简介 以官方centos镜像为基础,安装Node.js 10。 Unix prerequisites: gcc and g++ >= 6.3 or newer, or GNU ......

wuxinshui
40分钟前
1
0
Canonical修复了内核安全更新引入的回归问题

导读 Canonical今天发布了所有支持Ubuntu操作系统版本的新Linux内核版本,以解决最新内核安全更新引入的回归问题。 上周,Canonical发布了所有支持Ubuntu版本的Linux内核更新,以解决Jonatha...

问题终结者
今天
3
0
elasticSearch(四)——javaApi

一、

ittzg
今天
2
0
elasticseach 数据的导出与导出工具elasticdump使用

Centos下安装elasticdump yum install elasticdump 安装完成后 [root@i-vvxxxxswtw5ne ~]# elasticdump --helpelasticdump: Import and export tools for elasticsearchversion: 2.2.0......

scgaopan
今天
5
0
DNS域名解析命令 —— nslookup

命令nslookup 名称: name server lookup 用途: 查询域名的DNS信息 语法: ]# nslookup [选项] [域名] 模式: 交互式、非交互式 交互式选项: 实例: 交互式: 非交互式: 查询域名 ]# nsl...

迷失De挣扎
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部