建造者模式

定义:
   将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。具体点说,就是考虑用相同的原料制作出不同的东西出来。例如:快餐店里的食物都是那几样,汉堡、薯条、咖啡,牛奶等,但是能搭配出不同得套餐。

案例代码:
项目目录

|—builder-pattern|—pom.xml|—src|—main|—java|—org|—peko|—design|—pattern|—Builder.java|—fast_food|—FastFood.java|—impl|—Burger.java|—Chips.java|—Coffee.java|—Milk.java|—impl|—PackageImpl.java|—Package.java|—resources|—test|—java|—org|—peko|—design|—pattren|—Test01.java

FastFood.java

package org.peko.design.pattern.fast_food;import java.math.BigDecimal;public interface FastFood {String food();BigDecimal price();
}

Burger.java

package org.peko.design.pattern.fast_food.impl;import org.peko.design.pattern.fast_food.FastFood;import java.math.BigDecimal;public class Burger implements FastFood {@Overridepublic String food() {return "汉堡";}@Overridepublic BigDecimal price() {return new BigDecimal("10");}
}

Chips.java

package org.peko.design.pattern.fast_food.impl;import org.peko.design.pattern.fast_food.FastFood;import java.math.BigDecimal;public class Chips implements FastFood {@Overridepublic String food() {return "薯条";}@Overridepublic BigDecimal price() {return new BigDecimal("5");}
}

Coffee.java

package org.peko.design.pattern.fast_food.impl;import org.peko.design.pattern.fast_food.FastFood;import java.math.BigDecimal;public class Coffee implements FastFood {@Overridepublic String food() {return "咖啡";}@Overridepublic BigDecimal price() {return new BigDecimal("4");}
}

Milk.java

package org.peko.design.pattern.fast_food.impl;import org.peko.design.pattern.fast_food.FastFood;import java.math.BigDecimal;public class Milk implements FastFood {@Overridepublic String food() {return "牛奶";}@Overridepublic BigDecimal price() {return new BigDecimal("6");}
}

Package.java

package org.peko.design.pattern;import org.peko.design.pattern.fast_food.FastFood;public interface Package {Package addFood(FastFood fastFood);Package addDrink(FastFood fastFood);String getDetail();
}

PackageImpl.java

package org.peko.design.pattern.impl;import org.peko.design.pattern.Package;
import org.peko.design.pattern.fast_food.FastFood;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;public class PackageImpl implements Package {private final List<FastFood> list = new ArrayList<>();private String packageName;private BigDecimal cost = BigDecimal.ZERO;private PackageImpl() {}public PackageImpl(String packageName){this.packageName = packageName;}public Package addFood(FastFood fastFood){this.list.add(fastFood);this.cost = this.cost.add(fastFood.price());return this;}public Package addDrink(FastFood fastFood){this.list.add(fastFood);this.cost = this.cost.add(fastFood.price());return this;}@Overridepublic String getDetail() {StringBuilder detail = new StringBuilder("\r\n-----------------------------------------\r\n" +"套餐名称:"+ this.packageName + "\r\n" +"套餐价格:"+ this.cost + "\r\n" +"套餐内容:"+ "\r\n");for(FastFood fastFood: list){detail.append("  主食:").append(fastFood.food()).append(" 价格:").append(fastFood.price()).append("\r\n");}return detail.toString();}
}

Builder.java

package org.peko.design.pattern;import org.peko.design.pattern.fast_food.impl.Burger;
import org.peko.design.pattern.fast_food.impl.Chips;
import org.peko.design.pattern.fast_food.impl.Coffee;
import org.peko.design.pattern.fast_food.impl.Milk;
import org.peko.design.pattern.impl.PackageImpl;public class Builder {public Package PackageOne(){return new PackageImpl("套餐1").addFood(new Burger()).addDrink(new Coffee());}public Package PackageTwo(){return new PackageImpl("套餐2").addFood(new Chips()).addDrink(new Milk());}
}

Test01.java

package org.peko.design.pattren;import org.junit.Test;
import org.peko.design.pattern.Builder;public class Test01 {@Testpublic void test01(){Builder builder = new Builder();System.out.println(builder.PackageOne().getDetail());System.out.println(builder.PackageTwo().getDetail());}
}

运行结果

-----------------------------------------
套餐名称:套餐1
套餐价格:14
套餐内容:主食:汉堡 价格:10主食:咖啡 价格:4-----------------------------------------
套餐名称:套餐2
套餐价格:11
套餐内容:主食:薯条 价格:5主食:鸡肉 价格:6

通过组合不同的对象,建造出不同的方案,这也是个组合优先于继承的案例

【设计模式03】 建造者模式相关推荐

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

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

  2. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  3. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  4. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  5. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例

    本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...

  6. C#设计模式之四建造者模式(Builder Pattern)【创建型】

    一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...

  7. 学习《图说设计模式》建造者模式

    图说设计模式之建造者模式 1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这 ...

  8. 实践GoF的23种设计模式:建造者模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

  9. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  10. python设计模式之建造者模式

    python设计模式之建造者模式 ​ 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...

最新文章

  1. 如何在页面上实现一个圆形的可点击区域?
  2. linux下用js生成xml文件,使用JS读取XML文件的方法
  3. linux kernl网址
  4. stm32之TIM-高级定时器应用实例一(详细)
  5. java.util.concurrent.locks.Lock 接口 源码
  6. 8次c语言上机作业答案,计算机二级C语言上机题库及答案2017
  7. 苹果应用上架,一些信息的勾选(2017年4月27日)
  8. linux不识别xfs,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  9. VUE-用到的样式左右(transform,translate,padding)
  10. resultMap标签与resultType的异同
  11. 关于TP中的M()方法与D()方法
  12. matlab对比r语言,R语言与matlab循环时间对比
  13. 使用Hibernate SQLQuery(转)
  14. WSO2流处理器相关学习(1)快速入门指南【转】
  15. python爬虫做毕业论文_基于Python的网络爬虫(智联招聘)开发与实现毕业论文+作品源码+演示视频...
  16. 在java语言中所有类都是,【填空题】(10-1)Java语言中,( )是所有 类的祖先类。
  17. 不动产登记收费一览表
  18. 3D打印切片软件Cura及CuraEngine原理分析
  19. 性能测试从入门到高级进阶之路(二):小白教程influxdb+grafana+jmeter性能监控平台
  20. HMAC-SHA1加密算法c++与java的实现

热门文章

  1. 快牙网传——推送通知
  2. java语言 用Switch语句划分成绩
  3. 10bit显示器测试软件,10bit究竟是什么?10bit显示器画质更好?
  4. 目前安卓模拟器哪个比较好?
  5. 生活-女生的正确生活方式
  6. 北华大学计算机程序设计算法提高训练营个人赛(无L)
  7. c语言3x3矩阵转置 数组指针 接口(int(※p)[3],int n)
  8. android设置应用字体大小,在Android应用程序改变的TextView的字体大小从原始设置更改字体大小(Font size...
  9. Unity TileMap 存档 保存地图
  10. Android端如何简单的防黑产