建造者模式(Builder Pattern)属于创建形的设计模式,使用多个简单的对象一步一步构建成一个复杂的对象。

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

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

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

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

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

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

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

类图:

代码:

一、建立包装的接口

1 public interface Packing {
2   public String pack();
3 }

二、建立菜单项的接口

1 public interface Item {
2   public String name();
3   public Packing packing();
4   public float price();
5 }

三、建立实现了包装接口的实体类

1 public class Wrapper implements Packing {
2
3     @Override
4     public String pack() {
5         return "Wrapper";
6     }
7
8 }

1 public class Bottle implements Packing {
2
3     @Override
4     public String pack() {
5         return "Buttle";
6     }
7
8 }

四、建立实现菜单项接口的抽象类

1 public abstract class Burger implements Item {
2
3     @Override
4     public Packing packing() {
5         return new Wrapper();
6     }
7 }

1 public abstract class ColdDrink implements Item {
2
3     @Override
4     public Packing packing() {
5         return new Bottle();
6     }
7 }

五、建立分别继承抽象类的实体类产品

 1 public class ChickenBurger extends Burger {
 2
 3     @Override
 4     public String name() {
 5         return "ChickenBurger";
 6     }
 7
 8     @Override
 9     public float price() {
10         return 50.5f;
11     }
12
13 }

 1 public class VegBurger extends Burger {
 2
 3     @Override
 4     public String name() {
 5         return "VegBurger";
 6     }
 7
 8     @Override
 9     public float price() {
10         return 25.0f;
11     }
12
13 }

 1 public class Coke extends ColdDrink {
 2
 3     @Override
 4     public String name() {
 5         return "Coke";
 6     }
 7
 8     @Override
 9     public float price() {
10         return 30.0f;
11     }
12
13 }

 1 public class Pepsi extends ColdDrink {
 2
 3     @Override
 4     public String name() {
 5         return "Pepsi";
 6     }
 7
 8     @Override
 9     public float price() {
10         return 35.0f;
11     }
12
13 }

六、创建菜单类,提供点菜、算账、得到菜名的方法

 1 public class Meal {
 2    private List<Item> items = new ArrayList<Item>();
 3
 4    public void addItems(Item item){
 5        items.add(item);
 6    }
 7
 8    public float getCost(){
 9        float total = 0.0f;
10        for (Item item : items) {
11         total+=item.price();
12     }
13        return total;
14    }
15
16    public void showItems(){
17        for (Item item : items) {
18            System.out.print("Item : "+item.name());
19            System.out.print(", Packing : "+item.packing().pack());
20            System.out.println(", Price : "+item.price());
21     }
22    }
23 }

七、建立商品的组合类,负责创建菜单

 1 public class MealBuilder {
 2    public Meal prepareVegMeal(){
 3        Meal meal = new Meal();
 4        meal.addItems(new VegBurger());
 5        meal.addItems(new Coke());
 6        return meal;
 7    }
 8
 9    public Meal prepareNonVegMeal(){
10        Meal meal = new Meal();
11        meal.addItems(new ChickenBurger());
12        meal.addItems(new Pepsi());
13        return meal;
14    }
15 }

八、用户,可以选择不同的组合套餐

 1 public class BuiderPatternDemo {
 2
 3     public static void main(String[] args) {
 4         MealBuilder mealBuilder = new MealBuilder();
 5
 6         Meal meal1 = mealBuilder.prepareNonVegMeal();
 7         meal1.showItems();
 8
 9         Meal meal2 = mealBuilder.prepareNonVegMeal();
10         meal2.showItems();
11     }
12
13 }

转载于:https://www.cnblogs.com/ccw95/p/5970849.html

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

  1. Java 设计模式——建造者模式(Builder Pattern)

    前言 一.简介 ​二.实现方式 三.常见第一种方式 (1)一般有以下几个角色 (2)举个例子 (3)具体步骤 (4)具体代码 三.第二种方式 (1)主要有三个角色:抽象建造者.具体建造者.产品 (2) ...

  2. 我的Java设计模式-建造者模式

    在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...

  3. Java设计模式 建造者模式

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

  4. 设计建造者模式java代码,Java设计模式-建造者模式

    定义 Separate the construction of a complex object from its representation so that the sameconstructio ...

  5. java设计模式-建造者模式

    概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...

  6. Java设计模式-建造者模式 理论代码相结合

    继工厂模式后的建造者模式,也是java中常常能够见到的模式一种,应用场景也比较广,比较好用. 大家想了解的话,一起来看一看啦.

  7. JAVA设计模式--建造者模式

    目录 前言 一.什么是建造者模式 二.建造者模式的结构 三.建造者模式应用场景 参考文章 前言 在听完厉风行老师<设计模式系列课程>中的建造者模式一节后顿时感觉有点头大,感觉它有点像工厂方 ...

  8. Java 设计模式 -- 建造者模式

    建造者模式 建造者模式就是一步一步的创建一个复杂的对象,而且允许用户指定复杂对象的类型和内容. Builder 类是一个抽象类,用于定义一些创建子部件的方法,Builder类中应该还有一个 getRe ...

  9. JAVA设计模式 - 建造者模式

    建造者模式 , 又称为生成器模式 . 是创建型模式之一 . 与工厂方法模式和抽象工厂模式不同 , 这两种模式的目的是为了实现多态性 , 而建造者模式的目的则是为了将对象的构建与展示分离 .       ...

  10. 【面试高频】Java设计模式-建造者模式

    ⭐️写在前面 这里是温文艾尔的学习之路

最新文章

  1. JavaFX给控件添加css样式
  2. 网络编程模型综述 之 UNIX网络I/O模型
  3. mac找不到mysql_mac找不到mysql
  4. VS2010关于更改管理帮助设置的路径的解决方案
  5. pta-2、求三角形面积及周长 (10 分)
  6. 企业如何搭建数据分析平台
  7. Markdown(四)——绘图工具mermaid之状态图stateDiagram
  8. UIToolBar使用示例
  9. BIMC指出企业发展电子商务的问题
  10. AD软件画电路图笔记
  11. 他来了他来了,英伟达发布全新Hopper架构GPU“H100”4nm制程800亿晶体管
  12. 使用 pdf.js 查看发票时,显示不了台头和印章的解决办法
  13. 北漂去帝都大医院求医到底有多难?我的真实经历,真的是一路坎坷与辛酸~
  14. [LnOI2019]东京夏日相会
  15. 《恋爱厚黑学》杨冰阳
  16. vue input判断值是扫码枪还是键盘输入
  17. 微软搜索服务器,微软 Win10 搜索 UI 界面测试天气磁贴
  18. 吴信东--数据挖掘top10算法
  19. 我的2016--旅行路线篇
  20. 如何在Hi3559A上运行自己的YOLOv3模型(一)

热门文章

  1. Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
  2. paip.vs2010 或.net 4.0安装出错解决大法.
  3. HIBERNATE调试工具JBOSS TOOLS
  4. paip. VS2010版本控制tfs使用总结
  5. ubuntu:磁盘清理
  6. (转)王小川湖畔大学演讲:人工智能最具商业价值的是什么?
  7. Rust: codewars 的Duplicate Encoder
  8. Sentinel 实战应用中的小技巧
  9. 【优化算法】气味代理优化算法(SAO)【含Matlab源码 1131期】
  10. 【回归预测】基于matlab哈里斯鹰算法优化混合核极限学习机KELM回归预测【含Matlab源码 1751期】