主要解决:在整个软件系统中,面临着一个复杂对象的创建工程,通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个负载对象的各个部分面临着剧烈的变化。

何时使用:一些基本部分不变,而组合经常变化时。

应用实例:餐馆点餐,各个菜式的价格和内容不变,但是菜式的组合常常发生变化。

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

缺点:1.产品必须有共同点。2.如产品内部变化复杂,需要很多建造类。

应用场景:

1.    需要生产的对象具有复杂的内部结构

2.    需要生成的对象内部属性本身相互依赖

与工厂模式的区别:建造者更注重内部对象的组合和装配顺序

创建一个表示事务条目和食物包装的接口

Item.java
Public interface Item{Public String name();Public Packing packing();Public float price();
}
Packing.java
Public interface Packing {Public String pack();
}
Wrapper.java
Public class Wrapper implements Packing{
@Override
Public String pack() {Return “Wrapper”;
}
}Bottle.java
Public class Bottle implement Packing{
@Override
Public String pack() {Return “Bottle”;
}
}Burger.java
Public abstract class Burger implements Item{
@Override
Public Packing packing() {Return new Wrapper();
}@Override
Public abstract float price();
}ColdDrink.java
Public abstract class ColdDrink implements Item{
@Override
Public Packing packing(){Return new Bottle();
}@Override
Public abstract float price();}VegBurger.java
Public class VegBurger extends Burger {
@OverridePublic float price() {Return 24.5f;
}@Override
Public String name() {Return “VegBurger”;
}
}ChickenBurger.java
Public class ChickenBurger extends Burger{………………
}Coke.java
Public class Coke extends ColdDrink {@OverridePublic float price() {Return 1f;
}@Override
Public String name() {Return “Coke”;
}
}Pepsi.java
Public class Pepsi extends ColdDrink {@OverridePublic float price() {……
}@Override
Public String name() {……
}
}
Public class Meal {Private List<Item> items = new ArrayList<Item>();Public void addItem(Item item) {Items.add(item);
}Public float getCost() {float cost = 0f;for (Item item:items) {cost = cost + item.getPrice();
}
Return cost;
}Public void showItems() {For(Item item:items){System.out.println(“Item :” + item.name());System.out.println(“Item pack by” + item.packing().pack());System.out.println(“Item cost” + item.getPrice());
}
}
}Public class MealBuilder{Public Meal prepareVegMeal {Meal meal = new Meal();meal.addItem(new VegBurger());meal.addItem(new Pepsi());return meal;
}Public Meal prepareNonVegMeal(){Meal meal = new Meal();meal.addItem(new ChickenBurger());meal.addItem(new Coke());return meal;
}
}
Public class BuilderPatternDemo {Public static void main(String[] args) {MealBuilder mealBuilder = new prepareVegMeal();Meal vegMeal = mealBuilder.prepareVegMeal();vegMeal.showItems();System.out.println(“Veg Meal cost:” + vegMeal.getCost());}
}

[设计模式笔记]4.建造者模式相关推荐

  1. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  2. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

  3. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  4. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  5. 设计模式二:建造者模式

    建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...

  6. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

  7. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  8. 设计模式 之美 -- 建造者模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现 C语言实现 C++实现 4. 缺点 1. 解决问题 描述如下场景: 类的数据成员很多(8个以上),当我们进行初始化的时候放在初始化列表中,影响类的 ...

  9. 设计模式入门:建造者模式

    UML类图 建造者模式 代码示例 Product /*** 表示具体的产品,由多个部件组成*/ public class Product {/*** 存放产品每个部件的集合*/private List ...

最新文章

  1. 手机权限的一些问题记录
  2. C#制作自定义安装程序
  3. 抖音小程序微信小程序五角星型评分插件自定义分数组件
  4. Photoshop 融合属性 Unity Shader
  5. latex文档基础知识
  6. NoMasp博客导读
  7. 绿联 蓝牙适配器 linux,绿联蓝牙适配器
  8. UIImage 压缩
  9. 三大纪律七项注意(Access数据库)
  10. plc用c语言编程的好处,学习PLC编程的重要性
  11. 21-04-08 cms日志分析
  12. HTML邮件 兼容问题
  13. leggedrobotics free gait 足式机器人自由步态 苏黎世机器人系统实验室
  14. 总结Windows查看产品密匙方法
  15. SSD算法原理与代码(三)
  16. 【老九学堂】【C语言进阶】递归调用
  17. 微软七月十四日发行四个安全补丁
  18. SpringMVC导入Excel文件到MySQL
  19. 【JavaSE之JDK8新特性】三万字详文带你了解JDK8新特性
  20. java基础学习(四)

热门文章

  1. Verilog中的加法器(半加器,全加器,串行、超前进位加法器)
  2. java redis使用卡死_jedispool连redis高并发卡死的问题
  3. tcp协议接收方对out of order的分段是如何处理的?_TCP协议与流通信
  4. 超级大傻瓜代理器_年检尾气通不过咋办?傻瓜才更换三元催化器,聪明人一招解决!...
  5. python加颜色_python如何给指定的词语加上颜色,并写入Excel文档?
  6. python去除空行_python剔除空行
  7. Cpp 对象模型探索 / 类静态成员函数的调用方式
  8. vim 环境变量 encoding、fileencoding、fileencodings 的作用
  9. C typedef功能介绍(内附函数指针和指针函数的区别)
  10. Arduino--ESP8266物联网WIFI模块(贝壳物联)--数据上传服务器(单数据接口)