建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

介绍

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

何时使用:一些基本部件不会变,而其组合经常变化的时候。

如何解决:将变与不变分离开。

关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

应用实例: 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 2、JAVA 中的 StringBuilder。

优点: 1、建造者独立,易扩展。 2、便于控制细节风险。

缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。

使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。

注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

实现

我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。

我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。

然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 对象的 MealBuilder。BuilderPatternDemo,我们的演示类使用 MealBuilder 来创建一个 Meal。

QQ截图20200521151045.png

QQ截图20200521151055.png

QQ截图20200521151103.png

QQ截图20200521151109.png

QQ截图20200521151116.png

QQ截图20200521151031.png

QQ截图20200521151038.png

java 建造者实际中的用法_java中j建造者模式详解和使用方法相关推荐

  1. java中throws用法_java中throws实例用法详解

    在程序出现异常时,会有一个抛出异常的throw出现,这里我们要跟今天所讲的throws区分开.throws的作用是声明抛出,在名称上也跟throw有所不同.下面我们就throws对策概念.语法.实例带 ...

  2. cal java中的用法_Java中static用法

    Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...

  3. java中finally用法_java中的finally用法总结

    清单 1 说明 finally 语句块在 try 语句块中的 return 语句之前执行.我们再来看另一个例子(清单 2). 清单 2. 清单 2 的执行结果为: 清单 2 说明了 finally 语 ...

  4. java 管理员命令模式_java中命令模式详解和使用方法

    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...

  5. java中form用法_SpringMVC表单标签使用详解

    在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需 ...

  6. java用 拼接字符串的原理_Java String 拼接字符串原理详解

    首先来一道思考题: String str1 = "111111"; String str2 = "222222"; String str = str1 + st ...

  7. java生成html 控制编码方式_JAVA中文字符编码问题详解 控制台输出

    JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...

  8. java 正则判断小数_java判断是否是小数详解(正则方法)

    java使用正则判断是否小数的方法:(推荐:java视频教程)public static void main(String[] args) { Pattern p1 = Pattern.compile ...

  9. java 工厂模式详解_Java设计模式之工厂模式详解

    简单工厂其实并不是设计模式,只是一种编程习惯. 首先我们创建父类Cup,所有杯子类的父类.再创建它的子类BigCup和SmallCup类. public abstract class Cup { pu ...

最新文章

  1. 《professional asp.net 2.0》读书笔记--连载2
  2. IJ中 运行tomcat 配置
  3. xtrabackup 安装、备份和恢复
  4. [基础|理论|实验]Sizeof与Strlen的区别与联系
  5. 程序员转实施工程师_只有程序员才能看得懂?程序员:算了,不看了,我得写代码了...
  6. matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件
  7. Mysql 学习笔记08
  8. HALCON学习之旅(七)
  9. Numpy 字符串处理
  10. 使用spring的JdbcTemplate进行查询的三种回调方式的比较
  11. python使用lxml解析html获取页面内所有叶子节点的xpath路径
  12. 【十次方】十次方项目前期准备
  13. java程序员集合框架面试题_常见的Java集合框架面试题目及回答
  14. 一级建造师考试备考各科知识点记忆技巧
  15. 关于Windows api 多屏幕显示器识别ID问题。未解决
  16. [转]电子产品将标环保使用期限
  17. 2022 上半年 FDA 小分子药物盘点 - MedChemExpres
  18. 守护线程daemon
  19. stm32f103mini IO
  20. android蓝牙传输文件到mysql_蓝牙opp文件发送过程剖析

热门文章

  1. 用html5做淡出淡入效果,在Html5 canvas中淡入淡出
  2. 在vm中安装linux虚拟机,如何在vm虚拟机中安装linux
  3. halo多人正在连接服务器,在线人数过低 《光晕2》PC版多人服务器下月关闭
  4. 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
  5. 服务器缺少storportSYS文件,Windows操作系统蓝屏日志分析方法
  6. 小皮面板有php环境吗,体验phpStudy小皮面板创建LAMP/LNMP系统和建站图文
  7. php suse 安装mysql_SUSE Linux apache,Mysql,php,svn的安装
  8. android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?
  9. linux 拨号网关,用LINUX做在一张软盘上的拨号网关 (转)
  10. anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?