安装电脑思考到了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 ...
随机推荐
- 消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局
本文转载自消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局 前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布 ...
- KSM概念学习
KSM: Kernel SamePage Merging 内核同页合并 简介 KSM允许内核在两个或多个进程(包括虚拟客户机)之间共享完全相同的内存页. KSM让内核扫描检查正在运行中的程序,并比较他 ...
- Django之csrf中间件及auth模块使用
目录 一.基于配置文件的编程思想 1. importlib 模块 2. 配置文件 二.跨站请求伪造(csrf) 1.csrf简介以及由来 2.Django中的csrf中间件如何使用 2.1 普通for ...
- Prism -- 简介
Prism是一个开源框架,用于在WPF.Xamarin Forms.Uno/Win UI等应用中创建松耦合.可维护.可测试的XAML应用程序.Prism提供了一组设计模式的实现,这些设计模式有助于编写 ...
- 翻译:《实用的Python编程》03_00_Overview
目录 | 上一节 (2 处理数据) | 下一节 (4 类和对象) 3. 程序组织 到目前为止,我们已经学习了一些 Python 基础知识并编写了一些简短的脚本.但是,当开始编写更大的程序时,我们会想要 ...
- nacos服务注册与发现之客户端
服务注册 1.1 NamingService.registerInstance的方法为客户端提供的服务注册接口 1.2 客户端通过调用NamingService.registerService上报到n ...
- CentOS Install NMP
目录 Installation steps of the Nginx install run 默认安装路径 指定安装目录 Installation steps of the MySQL 下载源码包 解 ...
- HDOJ-3038(带权并查集)
How many answers wrong HDOJ-3038 一个很好的博客:https://www.cnblogs.com/liyinggang/p/5327055.html #include& ...
- linux进程隐藏手段及对抗方法
1.命令替换 实现方法 替换系统中常见的进程查看工具(比如ps.top.lsof)的二进制程序 对抗方法 使用stat命令查看文件状态并且使用md5sum命令查看文件hash,从干净的系统上拷贝这些工 ...
- FreeBSD安装xorg + xfce 4
FreeBSD安装xorg,以及xfce 安装xorg 可选包 -xorg 完整xorg环境包 -xorg-minimal xorg最小化包 ports安装 cd /usr/ports/x11/xor ...