java 建造者实际中的用法_java中j建造者模式详解和使用方法
建造者模式(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建造者模式详解和使用方法相关推荐
- java中throws用法_java中throws实例用法详解
在程序出现异常时,会有一个抛出异常的throw出现,这里我们要跟今天所讲的throws区分开.throws的作用是声明抛出,在名称上也跟throw有所不同.下面我们就throws对策概念.语法.实例带 ...
- cal java中的用法_Java中static用法
Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...
- java中finally用法_java中的finally用法总结
清单 1 说明 finally 语句块在 try 语句块中的 return 语句之前执行.我们再来看另一个例子(清单 2). 清单 2. 清单 2 的执行结果为: 清单 2 说明了 finally 语 ...
- java 管理员命令模式_java中命令模式详解和使用方法
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...
- java中form用法_SpringMVC表单标签使用详解
在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需 ...
- java用 拼接字符串的原理_Java String 拼接字符串原理详解
首先来一道思考题: String str1 = "111111"; String str2 = "222222"; String str = str1 + st ...
- java生成html 控制编码方式_JAVA中文字符编码问题详解 控制台输出
JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...
- java 正则判断小数_java判断是否是小数详解(正则方法)
java使用正则判断是否小数的方法:(推荐:java视频教程)public static void main(String[] args) { Pattern p1 = Pattern.compile ...
- java 工厂模式详解_Java设计模式之工厂模式详解
简单工厂其实并不是设计模式,只是一种编程习惯. 首先我们创建父类Cup,所有杯子类的父类.再创建它的子类BigCup和SmallCup类. public abstract class Cup { pu ...
最新文章
- 《professional asp.net 2.0》读书笔记--连载2
- IJ中 运行tomcat 配置
- xtrabackup 安装、备份和恢复
- [基础|理论|实验]Sizeof与Strlen的区别与联系
- 程序员转实施工程师_只有程序员才能看得懂?程序员:算了,不看了,我得写代码了...
- matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件
- Mysql 学习笔记08
- HALCON学习之旅(七)
- Numpy 字符串处理
- 使用spring的JdbcTemplate进行查询的三种回调方式的比较
- python使用lxml解析html获取页面内所有叶子节点的xpath路径
- 【十次方】十次方项目前期准备
- java程序员集合框架面试题_常见的Java集合框架面试题目及回答
- 一级建造师考试备考各科知识点记忆技巧
- 关于Windows api 多屏幕显示器识别ID问题。未解决
- [转]电子产品将标环保使用期限
- 2022 上半年 FDA 小分子药物盘点 - MedChemExpres
- 守护线程daemon
- stm32f103mini IO
- android蓝牙传输文件到mysql_蓝牙opp文件发送过程剖析
热门文章
- 用html5做淡出淡入效果,在Html5 canvas中淡入淡出
- 在vm中安装linux虚拟机,如何在vm虚拟机中安装linux
- halo多人正在连接服务器,在线人数过低 《光晕2》PC版多人服务器下月关闭
- 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
- 服务器缺少storportSYS文件,Windows操作系统蓝屏日志分析方法
- 小皮面板有php环境吗,体验phpStudy小皮面板创建LAMP/LNMP系统和建站图文
- php suse 安装mysql_SUSE Linux apache,Mysql,php,svn的安装
- android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?
- linux 拨号网关,用LINUX做在一张软盘上的拨号网关 (转)
- anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?