23种设计模式之-建造者模式
来源:互联网 发布:php环境变量怎么配置 编辑:程序博客网 时间:2024/05/16 16:04
什么是建造者模式
使用多个简单的对象一步一步构建成一个复杂的对象
有什么特点
1、建造者独立,易扩展。 2、便于控制细节风险。
什么时候使用
一些基本部件不会变,而其组合经常变化的时候。
如何使用
举例:我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。
我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。
package com.exe.builder.entity;public interface Item { public String name(); public float price(); public Packing packing();}
package com.exe.builder.entity;public interface Packing { public String pack(); public float price();}
package com.exe.builder.entity;public class Bottle implements Packing { @Override public String pack() { return "Bottle"; } @Override public float price() { return 0.5f; }}
package com.exe.builder.entity;public class Wrapper implements Packing { @Override public String pack() { return "Wrapper"; } @Override public float price() { return 0.2f; }}
package com.exe.builder.entity;public abstract class Burger implements Item { @Override public Packing packing() { return new Wrapper(); }}
package com.exe.builder.entity;public class ChickenBurger extends Burger { @Override public String name() { return "ChickenBurger"; } @Override public float price() { return 20f; }}
package com.exe.builder.entity;public class Coke extends ColdDrink { @Override public String name() { return "Coke"; } @Override public float price() { return 3.0f; }}
package com.exe.builder.entity;public abstract class ColdDrink implements Item { @Override public Packing packing() { return new Bottle(); }}
package com.exe.builder.entity;public class VegBurger extends Burger { @Override public String name() { return "VegBurger"; } @Override public float price() { return 15f; }}
package com.exe.builder.entity;public class Pepsi extends ColdDrink { @Override public String name() { return "Pepsi"; } @Override public float price() { return 1.5f; }}
package com.exe.builder.entity;import java.util.ArrayList;import java.util.List;public class Menu { 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.price()+item.packing().price(); } return cost; } public void showMenu(){ for(Item item:items){ System.out.print(item.name()); System.out.print(":"); System.out.print(item.price()); System.out.print(":"); System.out.print(item.packing().pack()); System.out.print(":"); System.out.println(item.packing().price()); } }}
package com.exe.builder.entity;public class BuildMenu { public Menu meal1(){ Menu menu=new Menu(); menu.addItem(new ChickenBurger()); menu.addItem(new Pepsi()); return menu; } public Menu meal2(){ Menu menu=new Menu(); menu.addItem(new VegBurger()); menu.addItem(new Coke()); return menu; }}
package com.exe.builder.entity;public class Test { public static void main(String[] args) { BuildMenu buildMenu=new BuildMenu(); Menu menu=buildMenu.meal1(); menu.showMenu(); System.out.println(menu.getCost()); System.out.println("============"); menu=buildMenu.meal2(); menu.showMenu(); System.out.println(menu.getCost()); }}
阅读全文
1 0
- 23种设计模式之建造者模式(Builder)
- c++ 23种设计模式之建造者模式
- //c++ 23种设计模式之建造者模式2
- 23种设计模式之建造者模式
- 23种设计模式之【建造者模式】
- 23种设计模式之——建造者模式
- 23种设计模式之-建造者模式
- Java 23种设计模式之建造者模式
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 设计模式之建造者模式
- C# 设计模式之 建造者模式
- 【设计模式】之 Builder 建造者模式
- 设计模式之建造者模式学习
- 验证数字最简单正则表达式大全
- linux下的 / ./ ../ ~/ 的意思
- 工作记录-----shiro登录
- Android的Intent机制详解
- cmake的一些小经验
- 23种设计模式之-建造者模式
- 跟我学建站3——如何有效减少网页体积,加载速度提升100倍
- eclipse生成API文档
- 模拟登陆知乎
- 机器学习常见算法个人总结(面试用)
- NullPointerException
- SDAutoLayout方法大全,cell自适应
- TensorFlow
- nd the $PHP_AUTOCONF environment variable. Then, rerun this script.