Java建造(Builder)模式
一、什么是建造模式:
建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同内部表象的产品。客户端不需要知道产品内部的结构和生产过程。
二、建造模式的结构:

Builder(抽象建造者角色):一个抽象的建造者父类结构,规定产品对象各个组成成分的建造。
ConcreteBuilder(产品的具体建造者):继承抽象建造者角色,实现建造方法buildPart1()、builderPart2(),完成产品零件实例的创建;返回产品实例的方法retrieveResultProuduct(),一般而言零件数和产品的建造方法数相同。
Prouduct(产品):具体建造者建造的对象。
Director(导演者角色):调用具体产品的创建者 ,获取产品对象。
总之,导演者角色与客户端直接打交道,导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委托给具体的建造者角色,具体建造者角色生产具体的零件,不被客户端所知。
/**
* 建造者模式产品对象
*
* @author ZhouDX
* @since 2019/3/6 22:02:58
*/
public class Product {
/**
* 产品Id
*/
private String prouductId;
/**
* 产品价格
*/
private String price; public String getProuductId() {
return prouductId;
} public void setProuductId(String prouductId) {
this.prouductId = prouductId;
} public String getPrice() {
return price;
} public void setPrice(String price) {
this.price = price;
} @Override
public String toString() {
return "Product{" + "prouductId='" + prouductId + '\'' + ", price='" + price + '\'' + '}';
}
}
Prouduct(产品)
/**
* 建造者模式建造者
*
* @author ZhouDX
* @since 2019/3/6 21:54:40
*/
public interface Builder {
/**
* 建造方法1
*/
public void method1(); /**
* 建造方法2
*/
public void method2(); /**
* 返回产品
*/
public Product returnResult();
}
Builder(抽象建造者角色)
/**
* @author ZhouDX
* @since 2019/3/6 22:04:22
*/
public class ConcreteBuilder implements Builder {
private Product product = new Product(); @Override
public void method1() {
product.setProuductId("10000001");
} @Override
public void method2() {
product.setPrice("100");
} @Override
public Product returnResult() {
return product;
}
}
ConcreteBuilder(产品的具体建造者)
/**
* @author ZhouDX
* @since 2019/3/6 22:07:41
*/
public class Director {
private Builder builder; /**
* 各个零件生产,获得完整的对象
*/
public void constructor() {
builder = new ConcreteBuilder();
builder.method1();
builder.method2();
builder.returnResult();
}
public Builder getBuilder() {
return builder;
}
}
Director (导演者对象)
/**
* @author ZhouDX
* @since 2019/3/12 22:45:02
*/
public class Client {
public static void main(String[] args) {
Director director = new Director();
director.constructor();
Product product = director.getBuilder().returnResult();
System.out.println(product.toString());
}
}
Client (客户端)
三、建造模式的实质:
建造模式利用一个导演者对象和具体建造者对象一个一个的建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程的指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。
Java建造(Builder)模式的更多相关文章
- 建造(Builder)模式
建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 摘自EffectiveJava:当构造方法参数过多时使用建造者模式. 产品的内部表象 ...
- Java之Builder模式(并用OC实现了这种模式)
本人在学习Java,直接先学习Netty框架,因为Netty框架是业界最流行的NIO框架之一,在学习的过程中,了解到Netty服务端启动需要先创建服务器启动辅助类ServerBootstrap,它提供 ...
- Builgen 插件——IntelliJ IDEA和Eclipse Java Bean Builder模式代码生成器-比lombok更符合需求
builder模式在越来越多的项目中使用,类似于alibaba fastjson JSONObject.fluentPut(),调用一个方法后返回这个对象本身,特别适合构建一些参数超级多的对象,代码优 ...
- java设计模式--Builder模式
一.Builder模式 二.使用例子 三.Spring中的Builder模式 Builder模式,构建者.构造者模式,在<图解设计模式>中归为 生成实例 一栏,该模式用于组装具有复杂结构的 ...
- Java Builder模式 体验(二)
在上篇文章中,对Java Builder模式的使用体验主要是从Builder对构造器改造方面的优秀特性来说的,感觉并没有从Java Builder模式本身的功能和作用去写,因此决定再从Build ...
- Java之建造者模式(Builder Pattern)(转)
1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者 ...
- Builder模式在Java中的应用
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...
- 浅谈设计模式--建造器模式(Builder Pattern)
建造器模式,是于创建带有大量参数的对象,并避免因参数数量多而产生的一些问题(如状态不一致-JavaBean的setter模式). 如果参数多且有些是必须初始化的,有些是不一定需要初始化的时候,创建对象 ...
- JAVA Builder模式构建MAP/LIST的示例
我们在构建一个MAP时,要不停的调用put,有时候看着觉得很麻烦,刚好,看了下builder模式,觉得这思路不错,于是乎,照着用builder模式写了一个构建MAP的示例,代码如下: import j ...
- Builder模式在Java中的应用(转)
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...
随机推荐
- 并发的核心:CAS 与synchronized, Java8是如何优化 CAS 的?
大家可能都听说说 Java 中的并发包,如果想要读懂 Java 中的并发包,其核心就是要先读懂 CAS 机制,因为 CAS 可以说是并发包的底层实现原理. 今天就带大家读懂 CAS 是如何保证操作的原 ...
- Redis in .NET Core 入门:(5) Sorted SET
第1篇:https://www.cnblogs.com/cgzl/p/10294175.html 第2篇 String:https://www.cnblogs.com/cgzl/p/10297565. ...
- Java语言编程 - 搭建Java开发环境
2.1 JDK.JRE和JVM关系 要弄清楚JDK.JRE和JVM这三者之间的关系,先看如下图,有个感性的认识: JDK:Java Development ToolKit(Java开发工具包).JDK ...
- Docker最全教程之使用.NET Core推送钉钉消息(十九)
前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...
- java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别 多线程中篇(十二)
概念 JMM规范解决了线程安全的问题,主要三个方面:原子性.可见性.有序性,借助于synchronized关键字体现,可以有效地保障线程安全(前提是你正确运用) 之前说过,这三个特性并不一定需要全部同 ...
- Java设置PPT幻灯片背景——纯色、渐变、图片背景
PPT幻灯片生成时,系统默认是无色背景填充,幻灯片设计需要手动设置背景效果,可设置颜色填充或者图片背景填充.本文将对此介绍具体实现方法. 使用工具:Free Spire.Presentation fo ...
- 设计模式 | 策略模式(strategy)
参考:https://www.cnblogs.com/lewis0077/p/5133812.html(深入解析策略模式) 定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相 ...
- SAP MM已经转成PO的采购申请Item依旧可以被删除?
SAP MM已经转成PO的采购申请Item依旧可以被删除? 笔者测试发现,我们可以删除已产生PO的PR item, 系统只是给一个警告信息,不阻止保存. Purchase orders already ...
- osi参考模型(开放系统互连参考模型)
自互联网诞生以来,随着网络飞速发展,用户迫切要求能在不同体系结构的网络空间交换信息,使得不同的网络能够互联起来. 国际化标准组织(International Organization for Stan ...
- 数据库原理 - 序列3 - 事务是如何实现的? - Redo Log解析
6.5 事务实现原理之1:Redo Log 介绍事务怎么用后,下面探讨事务的实现原理.事务有ACID四个核心属性:A:原子性.事务要么不执行,要么完全执行.如果执行到一半,宕机重启,已执行的一半要回滚 ...