文章目录

  • 1.0概念理解
  • 2.0编码理解
    • 2.1编码说明
    • 2.2编码实现

五种创建型设计模式:工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式

1.0概念理解

​ ​ 一句话理解:建造者模式就是通过将多个简单对象封装为一个复杂对象的过程并十分重视零件的装配顺序

概念:

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

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

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

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

​ ​ 优点:1、建造者独立,易扩展。 2、便于控制细节风险。
​ ​ 缺点:1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。

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

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

2.0编码理解

2.1编码说明

​​ ​  本API主要通过快餐店的套餐,通过蔬菜汉堡,鸡肉汉堡,百事可乐,可口可乐,四种商品,以及他们的包装,纸盒或者瓶子,也可以理解为六个简单对象,通过六个简单对象构建出两个复杂的套餐对象。

  • 套餐一:蔬菜汉堡(纸盒)+可口可乐(瓶子)
  • 套餐二:鸡肉汉堡(纸盒)+百事可乐(瓶子)

同时说明食品包装对象的封装通过抽象类来决定,并已经提前决定好

套餐内容由建造者来确定,建造者只需,构建套餐内食物名称即可

2.2编码实现

import java.util.ArrayList;
import java.util.List;/**********************接口准备*************************/
/*** 食品名* 包装* 价格*/
interface Item {public String name();public Packing packing();public float price();
}/*** 包装:纸盒,瓶子*/
interface Packing {public String pack();
}/**********************包装准备*************************/
//纸盒
class Wrapper implements Packing {public String pack() {return "Wrapper";}
}
//瓶子
class Bottle implements Packing {public String pack() {return "Bottle";}
}/**********************食品准备*************************/
/*** 食品:* 汉堡类:蔬菜汉堡,鸡肉汉堡* 冷饮类:可口可乐,百事可乐*/
//抽象汉堡类
abstract class Burger implements Item {//确定包装为纸盒public Packing packing() {  return new Wrapper();}public abstract float price();
}//蔬菜汉堡
class VegBurger extends Burger {public float price() {return 25.0f;}public String name() {return "Veg Burger";}
}//鸡肉汉堡
class ChickenBurger extends Burger {public float price() {return 50.5f;}public String name() {return "Chicken Burger";}
}//抽象冷饮类
abstract class ColdDrink implements Item {//确定包装为瓶子public Packing packing() {return new Bottle();}public abstract float price();
}//可口可乐
class Coke extends ColdDrink {@Overridepublic float price() {return 30.0f;}public String name() {return "Coke";}
}//百事可乐
class Pepsi extends ColdDrink {public float price() {return 35.0f;}public String name() {return "Pepsi";}
}/**********************套餐方法准备*************************//*** 套餐方法:蔬菜套餐,肉食套餐*/
class Meal {private List<Item> items = new ArrayList<Item>();//向套餐中添加食品public void addItem(Item item){items.add(item);}//展示套餐内容public void showItems(){for (Item item : items) {System.out.print("Item : "+item.name());System.out.print(", Packing : "+item.packing().pack());System.out.println(", Price : "+item.price());}}//计算套餐总和public float getCost(){float cost = 0.0f;for (Item item : items) {cost += item.price();}return cost;}
}/**********************建造者对象准备*************************//*** 建造类型:蔬菜套餐,肉食套餐*/
class MealBuilder {public Meal prepareVegMeal (){Meal meal = new Meal();       //向套餐中加入一些汉堡和饮料对象meal.addItem(new VegBurger());meal.addItem(new Coke());return meal;}public Meal prepareNonVegMeal (){Meal meal = new Meal();meal.addItem(new ChickenBurger());meal.addItem(new Pepsi());return meal;}
}/**********************测试案例******************************/public class BuilderPatternDemo {public static void main(String[] args) {//套餐创造者——>创建一个建造者对象MealBuilder mealBuilder = new MealBuilder();//调用对象中的蔬菜套餐对象创建方法Meal vegMeal = mealBuilder.prepareVegMeal();System.out.println("蔬菜套餐");//显示套餐项目及费用vegMeal.showItems();System.out.println("总价: " +vegMeal.getCost());//计算套餐总价/*** 此时我们在套餐vegMeal中封装了,蔬菜汉堡对象,可口可乐对象,纸盒包装对象,* 瓶子包装对象,将四个对象封装在一起就是建造者的核心内容。* 我们可以通过各种组合快速完成其他“套餐”的推出*///非蔬菜套餐Meal nonVegMeal = mealBuilder.prepareNonVegMeal();System.out.println("\n\n肉食套餐");//显示套餐项目及费用nonVegMeal.showItems();System.out.println("总价: " +nonVegMeal.getCost());}
}

程序运行结果:

Java创建型设计模式——建造者模式相关推荐

  1. 创建型设计模式——建造者模式

    1.提出问题 假如说,我们需要建房子:这一过程为打桩.砌墙.封顶.房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.3)请编写程序,完成需求. 传统的想法应该就是下 ...

  2. Java设计模式之创建型:建造者模式

    一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...

  3. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  4. 创建型设计模式-----原型模式(浅克隆、深克隆)

    目录 简介 为什么用克隆 浅克隆 深克隆 序列化实现深拷贝 应用场景 今天讲创建型设计模式中的原型模式,大家可以从标题中略微猜测一下,这个原型模式是个什么东东. 简介 定义:用原型实例创建对象的种类, ...

  5. 创建型设计模式——原型模式

    1.思考问题 现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和 tom羊属性完全相同的10只羊. 按照传统的思路来,我们可能会按照下面的方式去写. 那么这种写法的优缺 ...

  6. java设计模式——创建型之建造者模式

    自大学课程初识设计模式以来,就越发觉得有必要系统学习一下设计模式. 刚好在实习前准备期间课比较少,抽出一点时间整理一下记一些笔记,复制粘贴比较多. 笔记比较适合学习过设计模式的同学. Builder ...

  7. 每天学习一个设计模式(九):创建型之建造者模式

    目录 一.基本概念 二.通俗解释 三.建造者模式详解 1.造车的例子 2.建造者模式的结构 3.建造者模式的优点 4.使用场景 5.注意事项 四.建造者模式的扩展和最佳实践 建造者模式的扩展 最佳实践 ...

  8. 【创建型】建造者模式(Builder Pattern)

    主要作用: 可以使多个简单的对象,一步一步构建成一个复杂的对象 应用实例: 1.去肯德基,汉堡.可乐.薯条.炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐". 2.JA ...

  9. 创建型设计模式-原型模式

    文章目录 原型模式 一.浅拷贝 二.深拷贝 2.1 序列化与反序列化进行深拷贝 2.2 在原型类的 clone 方法中单独处理引用对象 原型模式 原型模式(Prototype Pattern)是用于创 ...

最新文章

  1. 微服务化之前需要先无状态化和容器化
  2. R语言readLines函数、n.readLines函数、readline函数读取文本文件实战
  3. v-model双向绑定原理_Vue数据绑定
  4. ASCII、Unicode、GBK、UTF-8之间的关系
  5. android 时钟进度条,CSS3时钟式进度条
  6. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等
  7. Android Ac 控件,Android控件--MultiAutoCompleteTextView
  8. sql 时态表的意义_SQL Server中的时态表
  9. PBRT 学习:安装编译
  10. 敲一下enter键,完成iOS的打包工作
  11. Zabbix3 ——Server端的安装配置小结
  12. 弹出打开蓝牙_iOS13隐藏特性 双蓝牙音频共享功能详解
  13. VS连接VSS代码管理器失败问题
  14. 统计学中p值计算公式_统计学中的p值怎么算,具体步骤
  15. 猜一猜,我国第一次大规模应用二维码是什么时候?
  16. c++14:std::quoted
  17. 新手入门,想用VB给班上写一个自动播放上下课铃声的程序,求教
  18. 原生JS实现点击按钮显示更多内容
  19. vue项目--资产管理系统
  20. [2018 NUIST 程序设计竞赛] A. 竹鼠的命运

热门文章

  1. 【算法练习】LeetCode-2322. 从树中删除边的最小分数
  2. 领导者如何树立权威?骂人罚款最愚蠢!这6招,一下捏住下属软肋
  3. 【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-踩坑篇
  4. 基金定投的七大误区 影响你超过10%的年收益!
  5. 做seo优化,更新文章要有规律
  6. 图形化开放式生信分析系统开发 - 7 分析报告的模板定制与自动生成
  7. 七部门联合撑腰外卖小哥,“美团们”如何笑傲外卖江湖?
  8. java 本地 mq_windows、linux下java连接本地MQ队列实现输入(二)
  9. 前世的500次回眸、才换来今生的擦肩而过
  10. .tsv文件批量导入mysql