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 ...
随机推荐
- 执行Python程序的两种方式
目录 交互式(了解) 命令行式(了解) Python执行程序的三个阶段(掌握) 交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口 ...
- 【JVM虚拟机】(8)--深入理解Class中--方法、属性表集合
#[JVM虚拟机](8)--深入理解Class中--方法.属性表集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机] ...
- java游戏开发杂谈 - 线程
线程,让游戏拥有了动态变化的能力. java的图形界面,在启动的时候,就开始了一个线程. 这个线程负责处理:JFrame.JPanel等的绘制.事件处理. 它是由操作系统调用的,在程序启动时开启,程序 ...
- MOCK API 的定义及实践(使用eolinker实现)
MOCK API 的定义 根据百度百科的定义,mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象,mock对 ...
- Odoo免费开源ERP销售收款的财务对账解决方案
概述 前面文章介绍了佛山王朝家具的案例背景.佛山王朝家具公司在全国有30多家门店,三个生产工厂.王朝家具有六大痛点问题: 一.订单迫切需要实现电子化管理及在线签名 二.总部分单工作量大,供应链效率低 ...
- BI基础知识
- Leetcode 136.只出现一次的数字 By Python
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
- LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度
我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问 ...
- 使用CAS实现无锁列队-链表
#include <stdlib.h> #include <stdio.h> #include <pthread.h> #include <iostream& ...
- 滚动视差?CSS 不在话下
何为滚动视差 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验. 作为网页设计的热点趋势,越来越多的网站应用了这项技术. 通常 ...