安装电脑思考到了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 ...
随机推荐
- 微信小程序优化:实现picker组件中input输入框禁止输入,而只能通过picker组件选择日期
原来的代码如下: <view class="right"> <picker mode="date" value="{{mat ...
- 答不上的JUC笔试题
1:有一个总任务A,分解为子任务A1 A2 A3 ...,任何一个子任务失败后要快速取消所有任务,请写程序模拟. 「请寻求最优解,不要只是粗暴wait()」 本题解题思路:Fork/Join 通常使用 ...
- WPF -- 构建动画
写在前面:本文代码摘自<Head First C#> 本文使用ObjectAnimationUsingKeyFrames + Storyboard构建一个动画. ObjectAnimati ...
- Vuex理解与使用
1.Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,用于管理页面的数据状态.提供统一数据操作的生态系统.在组件中可以任意获取仓库中的数据.和Vuex类似的还有redux ...
- 关于使用C3P0程序报错Having failed to acquire a resource, com.mchange.v2.resourcepool的问题
由于是新手的问题,C3P0的使用时严格跟着视频来的,但是问题却来的很突然 在导入了三个包以及创建了路径以后 进行测试 class JdbcutilsTest { @Test void TestGetC ...
- POJ-3026(图上的最小生成树+prim算法+gets函数使用)
Borg Maze POJ-3026 一开始看到这题是没有思路的,看了题解才知道和最小生成树有关系. 题目的意思是每次走到一个A或者S就可以分为多个部分继续进行搜索.这里就可以看出是从该点分出去的不同 ...
- 过多if - else 的问题, 以及策略模式 + 反射解决方法
策略模式解决if - else 的代码 业务场景: 外包企业的审批人需要审批打卡的场景: 审批人分为多种不同的级别,多种级别中具有方式相同但是内容不同的操作:审批. 原来场景: 有前端传来审批人参数, ...
- VS添加dll引用
直接添加(CADImport.dll) 手动添加 (sgcadexp.dll) 直接放到项目bin的目录下
- go调用python命令行参数过量报错python.exe: The filename or extension is too long.的解决方法
当我们在调用python时,如果传入的参数数据量过大时会报错 python.exe: The filename or extension is too long. 这时候我们的解决办法是放弃传参,将想 ...
- 后台开发-核心技术与应用实践--TCP协议
网络模型 为使不同计算机厂家的计算机能够互相通信,国际标准化组织 ISO 1981 年正式推荐了一个网络系统结构一一七层参考模型,也叫作开放系统互连模型. ISO 七层网络模型及其功能展示: 这个七层 ...