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的建造者模式可以应用在什么地方相关推荐

  1. 监听者模式 java_java监听者模式

    1.原理: 当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法. 例如:创建一个"人"类Class Person 人拥有吃的方法public void eat(){} ...

  2. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  3. 从零开始学习Java设计模式 | 创建型模式篇:建造者模式

    在本讲,我们来学习一下创建型模式里面的最后一个设计模式,即建造者模式. 概述 建造者模式是指将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 读完这句话之后,我估计很多人都已经懵 ...

  4. 【创建型模式四】建造者模式

    1. 前情提要 在外观模式中,我们实现了通过一个外观类CalculatorPackager.java,将组装计算器的步骤封装起来,让客户端直接调用CalculatorPackager中的方法即可组装出 ...

  5. 设计模式---创建型模式(工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式)

    对设计模式出于学习阶段没有啥高深的见解,本文主要讲的是自己的感悟与在自己实践中可能用到的地方,后续会有自己项目中的总结,全面学习还是进链接里,我就不赘述啦 工厂模式 文章链接:工厂模式. 个人理解: ...

  6. 生成器模式(又名建造者模式、Builder Pattern)

    姓名:谭鹏飞 学号:07770106 模式名称:生成器模式 1.问题描述 生活场景:你玩过种地.种花等类似的游戏吗?这是最近很流行的游戏哟!下面就是从种花游戏中剪切的四个花盆(盆景),很漂亮吧!你将不 ...

  7. 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...

  8. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  9. 调停者模式 java_JAVA设计模式之调停者模式详解

    在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从 ...

最新文章

  1. java二级考试历年真题6_2018年3月计算机二级考试JAVA试题及答案(六)
  2. 打开和关闭mysql服务器_启动和关闭MySQL服务器
  3. 简单文件的上传与保存
  4. .net core 生成html,ASP.NET Core 中如何将 .cshtml 视图文件生成为 .cs 文件
  5. 谷歌浏览器打开标签会把之前的覆盖掉_Chrome 浏览器新更新解决了本地文件拖入导致的标签页意外关闭问题...
  6. python3讨论交流地_讨论 - 廖雪峰的官方网站
  7. 路由器DHCP和DHCP中继的配置
  8. Linux下使用dd命令向U盘中写入ISO镜像
  9. 坚果pro2救砖专用(文末包含twrp900E的解决方法)
  10. 最新Win10离线安装.NET Framework 3.5的方法(附离线包2022/3/22)
  11. apkeditor pro_APK编辑器 APK Editor Pro v1.15.0 + ApkModifier v3.6
  12. json.loads()的字符串中为单引号引发的错误
  13. SketchUp模型组件【iMod · 精选242 —— 现代客厅SU模型】
  14. 【GAOPS050】自同步加扰和帧同步加扰
  15. 每天一个小技巧【5】·数位板笔刷压感设置
  16. Zabbix优化深信服AC的设备运行时间监控项
  17. 九度 题目1013:开门人和关门人
  18. 小程序获取微信运动步数并集成echarts报表显示
  19. java计算机毕业设计师资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  20. idea中springmvc的配置(结合how2j教程)

热门文章

  1. Pytorch版本YOLOv3模型转Darknet weights模型然后转caffemodel再转wk模型在nnie上面推理
  2. 称霸全球游戏,腾讯帝国的困局之处
  3. 专访深蓝航天CEO霍亮:做中国版梅林发动机 深耕火箭回收复用赛道
  4. 大疆无人机航测实测教程:航线规划、像控点布设、刺点、成图(附航测练习数据下载)
  5. 【Linux】页表的深入分析
  6. 容联云2021年Q1财报出炉:净金额留存率超110%
  7. 推荐给大家一个下载软件的好网站—MSDN I Tell you
  8. STM32F103+W5500,HAL库
  9. 机器学习中,什么是线性和非线性?
  10. android跑马灯效果不起作用,Android跑马灯效果失效问题