安装电脑思考到了Java设计模式:建造者模式
定义
建造者模式是对象的创建型模式,可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象
建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的
意图
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
主要解决问题
主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定
何时使用
一些基本部件不会变,而其组合经常变化的时候
优缺点
优点:
- 建造者独立,易扩展
- 便于控制细节风险
缺点:
- 产品必须有共同点,范围有限制
- 如果内部变化复杂,会有很多的建造类
结构

涉及的角色:
- 抽象建造者(Builder)角色:给出一个抽象接口,用来规范产品对象的各个组成成分的建造,一般来说,产品所包含的零件数目和建造方法的数目相等,换而言之,有多少个零件,就有多少相应的建造方法
- 具体建造者(ConcreteBuilder)角色:实现抽象建造者所声明的接口,给出一步步的完成创建产品实例的操作;在建造过程完成后,提供产品的实例
- 导演者(Director)角色:担任这个角色的类调用具体建造者角色来创建产品对象,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色
- 产品(Product)角色:产品便是建造中的复杂对象,一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的接口,而完全可以是不相关的
一般来说,每有一个产品类,就有一个相应的具体建造者类,这些产品应当有一样数目的零件,而每有一个零件,就相应的在所有的建造者角色中有一个建造方法
源码如下:
public interface Builder {
/** 产品零件构造方法 */
void buildPart1();
/** 产品零件构造方法 */
void buildPart2();
/** 产品返还方法 */
Product retrieveResult();
}
public class ConcreteBuilder implements Builder {
private Product product = new Product();
/** 产品零件构造方法 */
@Override
public void buildPart1() {
//建造产品的第一个零件
}
/** 产品零件构造方法 */
@Override
public void buildPart2() {
//建造产品的第二个零件
}
/** 产品返还方法 */
@Override
public Product retrieveResult() {
return product;
}
}
public class Director {
private Builder builder;
/**
* 产品构造方法,负责调用各个零件构造方法
*/
public void construct() {
builder = new ConcreteBuilder();
builder.buildPart1();
builder.buildPart2();
builder.retrieveResult();
}
}
public class Product {
}
组装电脑的例子
电脑的组装有内存、主板、cpu、机箱等,可以按照不同的步骤进行组装
电脑类:
public class Compute {
/** cpu */
private String cpu;
/** 主板 */
private String board;
/** 内存 */
private String memory;
/** 机箱 */
private String crate;
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getBoard() {
return board;
}
public void setBoard(String board) {
this.board = board;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
public String getCrate() {
return crate;
}
public void setCrate(String crate) {
this.crate = crate;
}
@Override
public String toString() {
return "Compute{" +
"cpu='" + cpu + '\'' +
", board='" + board + '\'' +
", memory='" + memory + '\'' +
", crate='" + crate + '\'' +
'}';
}
}
抽象建造者角色,抽象出组装电脑的步骤:
public interface ComputeBuilder {
/** 组装CPU */
void buildCpu();
/** 组装主板 */
void buildBoard();
/** 组装内存 */
void buildMemory();
/** 组装机箱 */
void buildCrate();
/** 组装完成,返回一台电脑 */
Compute getCompute();
}
具体建造者角色,组装各个零件的操作:
public class ConcreteComputeBuilder implements ComputeBuilder {
private Compute compute = new Compute();
@Override
public void buildCpu() {
System.out.println("组装cpu");
compute.setCpu("组装cpu");
}
@Override
public void buildBoard() {
System.out.println("组装主板");
compute.setBoard("组装主板");
}
@Override
public void buildMemory() {
System.out.println("安装内存条");
compute.setMemory("安装内存条");
}
@Override
public void buildCrate() {
System.out.println("安装机箱");
compute.setCrate("安装机箱");
}
@Override
public Compute getCompute() {
return compute;
}
}
开始组装:
public class ComputeDirector {
private ComputeBuilder builder;
public void assemblyCompute() {
builder = new ConcreteComputeBuilder();
builder.buildCpu();
builder.buildBoard();
builder.buildMemory();
builder.buildCrate();
System.out.println(builder.getCompute());
}
}
测试类:
public class Client {
public static void main(String[] args) {
ComputeDirector director = new ComputeDirector();
director.assemblyCompute();
}
}

安装电脑思考到了Java设计模式:建造者模式的更多相关文章
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
- 我的Java设计模式-建造者模式
在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...
- java设计模式——建造者模式
一. 定义与类型 定义:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 用户只需制定需要建造的类型就可以得到它们,建造过程以及细节不需要知道 类型:创建型 建造者模式与工厂模 ...
- Java设计模式-建造者模式(Builder)
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指 ...
- Java设计模式——建造者模式(创建型模式)
概述 建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 建造者模式意在为重叠构造 ...
- Java设计模式--------建造者模式(Builder模式)
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...
- java设计模式------建造者模式
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类图 描述 Builder:定义一个建造者抽象类,以规范产品对象的各个组成部分的建造.这个接口 ...
- Java设计模式—建造者模式
建造模式: 将一个复杂的对象的构建与它的表示分离,使得同样的构建 过程可以创建不同的. 建造模式表示是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内 ...
- C#设计模式-建造者模式
在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成. 例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由C ...
随机推荐
- Mybites学习
参考链接:https://www.cnblogs.com/dongying/p/4073259.html <select <!-- 1. id (必须配置) id是命名空间中的唯一标识符, ...
- 微信小程序:利用map方法方便获得对象数组中的特定属性值们
- 鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录: 一.弹幕库的基础知识 二.弹幕库的使用方法 三.sample解析 四.作者系列文章合集 前言 ...
- Git:本地仓库管理
git log:查看 commit 提交历史 git log --pretty=oneline:简化log输出内容 git reflog:查看每一次命令的历史记录 版本回退 git reset HEA ...
- DatePicker 多时间粒度选择器组件
使用方法: 在.vue文件引入 import ruiDatePicker from '@/components/rattenking-dtpicker/rattenking-dtpicker.vue' ...
- 越来越受欢迎的Vue想学么,90后小姐姐今儿来教你
摘要:Vue的相关技术原理成为了前端岗位面试中的必考知识点,掌握 Vue 对于前端工程师来说更像是一门"必修课". 本文原作者为尹婷,擅长前端组件库研发和微信机器人. 我们发现, ...
- 锁与同步器的基础--AQS
什么是AQS AQS全名AbstractQueueSynchronizer,可以翻译为抽象队列同步器 Abstract--说明该类需要被继承,提供实现的框架和一些必要的功能 事实上,AQS也的确提供了 ...
- ResNet论文笔记
其实ResNet这篇论文看了很多次了,也是近几年最火的算法模型之一,一直没整理出来(其实不是要到用可能也不会整理吧,懒字头上一把刀啊,主要是是为了将resnet作为encoder嵌入到unet架构中, ...
- Python中树的遍历-堆排序
1.二叉树的遍历 遍历:迭代所有元素一遍. 树的遍历:对树中所有的元素不重复的访问一遍,也成扫描 广度优先遍历:层序遍历 深度优先遍历:前序.中序.后续遍历. 遍历序列:将树中所有元素遍历一遍后,得到 ...
- Prometheus时序数据库-数据的查询
Prometheus时序数据库-数据的查询 前言 在之前的博客里,笔者详细阐述了Prometheus数据的插入过程.但我们最常见的打交道的是数据的查询.Prometheus提供了强大的Promql来满 ...