建造者模式 java_java的建造者模式可以应用在什么地方
java的建造者模式可以应用在什么地方
发布时间:2020-06-24 09:17:50
来源:亿速云
阅读:182
作者:Leah
java的建造者模式可以应用在什么地方?这篇文章运用了实例代码展示,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
建造者模式
模式的定义与特点
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
该模式的主要优点如下:
各个具体的建造者相互独立,有利于系统的扩展。客户端不必知道产品内部组成的细节,便于控制细节风险。
其缺点如下:
产品的组成部分必须相同,这限制了其使用范围。如果产品的内部变化复杂,该模式会增加很多的建造者类。
建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。
模式的结构与实现
建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成,现在我们来分析其基本结构和实现方法。
1. 模式的结构
建造者(Builder)模式的主要角色如下。
产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
其结构图如下所示:
2. 模式的实现
(1) 产品角色:包含多个组成部件的复杂对象。public class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public void setPartC(String partC) {
this.partC = partC;
}
public void show() {
//显示产品的特性
}
}
(2) 抽象建造者:包含创建产品各个子部件的抽象方法。public abstract class Builder {
//创建产品对象
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//返回产品对象
public Product getResult() {
return product;
}
}
(3) 具体建造者:实现了抽象建造者接口。public class ConcreteBuilder extends Builder {
public void buildPartA() {
product.setPartA("建造 PartA");
}
public void buildPartB() {
product.setPartA("建造 PartB");
}
public void buildPartC() {
product.setPartA("建造 PartC");
}
}
(4) 指挥者:调用建造者中的方法完成复杂对象的创建。public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//产品构建与组装方法
public Product construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
(5) 客户端public class Client {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.construct();
product.show();
}
}
模式的应用场景
建造者(Builder)模式创建的是复杂对象,其产品的各个部分经常面临着剧烈的变化,但将它们组合在一起的算法却相对稳定,所以它通常在以下场合使用。
创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。
到此为止, 关于java的建造者模式有了一个基础的认识, 但是对于具体的使用方法还是需要多加巩固和练习,如果想了解更多相关内容,请关注亿速云行业资讯。
建造者模式 java_java的建造者模式可以应用在什么地方相关推荐
- 监听者模式 java_java监听者模式
1.原理: 当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法. 例如:创建一个"人"类Class Person 人拥有吃的方法public void eat(){} ...
- 建造者模式java_java设计模式3——建造者模式
java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...
- 从零开始学习Java设计模式 | 创建型模式篇:建造者模式
在本讲,我们来学习一下创建型模式里面的最后一个设计模式,即建造者模式. 概述 建造者模式是指将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 读完这句话之后,我估计很多人都已经懵 ...
- 【创建型模式四】建造者模式
1. 前情提要 在外观模式中,我们实现了通过一个外观类CalculatorPackager.java,将组装计算器的步骤封装起来,让客户端直接调用CalculatorPackager中的方法即可组装出 ...
- 设计模式---创建型模式(工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式)
对设计模式出于学习阶段没有啥高深的见解,本文主要讲的是自己的感悟与在自己实践中可能用到的地方,后续会有自己项目中的总结,全面学习还是进链接里,我就不赘述啦 工厂模式 文章链接:工厂模式. 个人理解: ...
- 生成器模式(又名建造者模式、Builder Pattern)
姓名:谭鹏飞 学号:07770106 模式名称:生成器模式 1.问题描述 生活场景:你玩过种地.种花等类似的游戏吗?这是最近很流行的游戏哟!下面就是从种花游戏中剪切的四个花盆(盆景),很漂亮吧!你将不 ...
- 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式
一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...
- 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...
- 调停者模式 java_JAVA设计模式之调停者模式详解
在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从 ...
最新文章
- java二级考试历年真题6_2018年3月计算机二级考试JAVA试题及答案(六)
- 打开和关闭mysql服务器_启动和关闭MySQL服务器
- 简单文件的上传与保存
- .net core 生成html,ASP.NET Core 中如何将 .cshtml 视图文件生成为 .cs 文件
- 谷歌浏览器打开标签会把之前的覆盖掉_Chrome 浏览器新更新解决了本地文件拖入导致的标签页意外关闭问题...
- python3讨论交流地_讨论 - 廖雪峰的官方网站
- 路由器DHCP和DHCP中继的配置
- Linux下使用dd命令向U盘中写入ISO镜像
- 坚果pro2救砖专用(文末包含twrp900E的解决方法)
- 最新Win10离线安装.NET Framework 3.5的方法(附离线包2022/3/22)
- apkeditor pro_APK编辑器 APK Editor Pro v1.15.0 + ApkModifier v3.6
- json.loads()的字符串中为单引号引发的错误
- SketchUp模型组件【iMod · 精选242 —— 现代客厅SU模型】
- 【GAOPS050】自同步加扰和帧同步加扰
- 每天一个小技巧【5】·数位板笔刷压感设置
- Zabbix优化深信服AC的设备运行时间监控项
- 九度 题目1013:开门人和关门人
- 小程序获取微信运动步数并集成echarts报表显示
- java计算机毕业设计师资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
- idea中springmvc的配置(结合how2j教程)
热门文章
- Pytorch版本YOLOv3模型转Darknet weights模型然后转caffemodel再转wk模型在nnie上面推理
- 称霸全球游戏,腾讯帝国的困局之处
- 专访深蓝航天CEO霍亮:做中国版梅林发动机 深耕火箭回收复用赛道
- 大疆无人机航测实测教程:航线规划、像控点布设、刺点、成图(附航测练习数据下载)
- 【Linux】页表的深入分析
- 容联云2021年Q1财报出炉:净金额留存率超110%
- 推荐给大家一个下载软件的好网站—MSDN I Tell you
- STM32F103+W5500,HAL库
- 机器学习中,什么是线性和非线性?
- android跑马灯效果不起作用,Android跑马灯效果失效问题