java设计模式05_Builder模式
来源:互联网 发布:打印机正在向windows 编辑:程序博客网 时间:2024/06/05 10:32
Builder模式
构建器(Builder)模式使用简单对象并使用逐步方法构建复杂对象。 这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。
构建器(Builder)模式构建器逐步构建最终对象,此构建器独立于其他对象。
实现
考虑了一家快餐店的商业案例,其中典型的餐点可能是汉堡和冷饮。 汉堡可以是一个素食汉堡或鸡肉汉堡,将被包装进行包装。 冷饮可以是一个可乐或百事将装放在一个瓶子中。
我们将创建一个Item接口,表示食品项目,如汉堡包和冷饮料以及实现Item接口的具体类。还有一个包装接口,表示食品包装和实现包装接口的具体类,因为汉堡包装在包装和冷饮将包装成瓶子。
然后创建一个具有ItemListList和MealBuilder的Meal类,通过组合Item来构建不同类型的Meal对象。 BuilderPatternDemo这是一个演示类将使用MealBuilder构建一个食品套餐。
代码
package com.test;import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { MealBuilder mealBuilder = new MealBuilder(); Meal vegMeal = mealBuilder.prepareVegMeal(); System.out.println("Veg Meal"); vegMeal.showItems(); System.out.println("Total Cost: " + vegMeal.getCost()); Meal nonVegMeal = mealBuilder.prepareNonVegMeal(); System.out.println("\n\nNon-Veg Meal"); nonVegMeal.showItems(); System.out.println("Total Cost: " + nonVegMeal.getCost()); }}// 第1步,创建两个接口分别代表食品和包装的项目(Item 和 Packing)interface Item { public String name(); public Packing packing(); public float price();}interface Packing { public String pack();}// 第2步,创建实现Packing接口的具体类。如下代码所示class Wrapper implements Packing { @Override public String pack() { return "Wrapper"; }}class Bottle implements Packing { @Override public String pack() { return "Bottle"; }}// 第3步,创建抽象类实现Item接口提供默认功能。abstract class Burger implements Item { @Override public Packing packing() { return new Wrapper(); } @Override public abstract float price();}abstract class ColdDrink implements Item { @Override public Packing packing() { return new Bottle(); } @Override public abstract float price();}// 第4步、创建扩展汉堡(Burger)和冷饮(ColdDrink )类的具体类class VegBurger extends Burger { @Override public float price() { return 25.0f; } @Override public String name() { return "Veg Burger"; }}class ChickenBurger extends Burger { @Override public float price() { return 50.5f; } @Override public String name() { return "Chicken Burger"; }}class Coke extends ColdDrink { @Override public float price() { return 30.0f; } @Override public String name() { return "Coke"; }}class Pepsi extends ColdDrink { @Override public float price() { return 35.0f; } @Override public String name() { return "Pepsi"; }}// 第5步、创建一个具有上面定义的Item对象的Meal类。class Meal { private List<Item> items = new ArrayList<Item>(); public void addItem(Item item) { items.add(item); } public float getCost() { float cost = 0.0f; for (Item item : items) { cost += item.price(); } return cost; } 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()); } }}// 第6步、创建一个MealBuilder类,这是一个实际的构建类负责创建Meal对象。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; }}
运行结果:
Veg MealItem : Veg Burger, Packing : Wrapper, Price : 25.0Item : Coke, Packing : Bottle, Price : 30.0Total Cost: 55.0Non-Veg MealItem : Chicken Burger, Packing : Wrapper, Price : 50.5Item : Pepsi, Packing : Bottle, Price : 35.0Total Cost: 85.5
阅读全文
0 0
- java设计模式05_Builder模式
- java设计模式_Builder模式
- java设计模式进阶_builder
- 设计模式_Builder模式
- 设计模式_Builder模式
- 设计模式——建造者模式_Builder Pattern
- (随记八)Android设计模式解析与实战_自由扩展项目_Builder模式_定义与简单实现
- Java与设计模式(05)--原型模式
- java设计模式-观察者模式
- Java设计模式-----Singleton模式
- Java设计模式-----Command模式
- Java设计模式-----State模式
- Java设计模式-----Composite模式
- Java设计模式 -- 策略模式
- java设计模式-----策略模式
- java设计模式_Composite模式
- java 设计模式-策略模式
- java设计模式 访问者模式
- 修改ToolBar+DrawerLayout 的图标
- smooth_L1_loss_layer.cpp:28] Check failed: bottom[0]->channels() == bottom[1]->channels() (12 vs. 84
- java设计模式04_单例模式
- JAVA技术之垃圾回收机制
- mysql数据库跨服务器查询【需要确定mysql支持FEDERATED ,可以参照文章内容自己配置】
- java设计模式05_Builder模式
- 数据库处理海量数据时的一些优化查询速度方法
- jquery的datepicker()控件使用方法
- 学学JavaScript(ES6)对象、函数、字符串新语法
- 零基础如何系统地学习前端开发?
- 通过python调用adb命令实现用元素名称、id、class定位元素
- Ehcache配置文件的详细说明
- 访问外网的工具
- vimtutor教程(双语版)