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 ...
随机推荐
- Hibernate内容详解
一:引入Hibernate的jar包 http://t.cn/EioD1xk 二:配置Hibernate的核心配置文件hibernate.cfg.xml <!DOCTYPE hibernate- ...
- Unity C#笔记 容器类
记录一下Unity C#常用的容器,方便写脚本时忘了容器类来查下 (- -||) 动态数组 List<T> using System.Collections.Generic; //泛型容器 ...
- Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)
本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...
- jQuery AJAX与jQuery事件的分析讲解
jQuery 本身即是为事件处理而特别设计的,jQuery 事件处理方法是 jQuery 中的核心函数. $(function() { ... }); 是如下格式的缩写: ? 1 $(document ...
- Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)
目录 1. 数据资源准备 2. 编译第三方库 3. 编译GDAL 4. 编译OSG 1) CMAKE_INSTALL_PREFIX: 2) BUILD_OSG_EXAMPLES/BUILD_MFC_ ...
- ArcGIS消除图斑重叠错误
在生产中,经常会遇见有图斑重叠这种拓扑错误的矢量,大部分情况下,需要人工比对影像处理.但是如果只需要用到这些矢量的形状.面积,可以在ArcMap中用以下方法,快速消除图斑重叠错误,不必手工处理. 如下 ...
- 关于RecyclerView嵌套导致item复用异常,界面异常的问题
常规需求: 外层RecyclerView嵌套内层RecyclerView , 在上下滑动的时候会出现item数据以及view的显示异常. 解决办法: 1.重写 getItemViewType 方法 ...
- C#Npoi
https://download.csdn.net/download/youhmcq/7725559http://www.cnblogs.com/downmoon/archive/2012/04/11 ...
- 【TensorFlow篇】--反向传播
一.前述 反向自动求导是 TensorFlow 实现的方案,首先,它执行图的前向阶段,从输入到输出,去计算节点值,然后是反向阶段,从输出到输入去计算所有的偏导. 二.具体 1.举例 图是第二个阶段,在 ...
- Docker 搜索镜像
文章首发个人网站: https://www.exception.site/docker/docker-search-image 本文中,您将学习 Docker 如何搜索镜像? 一.search 命令 ...