Java设计模式——建造者模式

博客 动态
0 246
优雅殿下
优雅殿下 2022-04-07 21:57:39
悬赏:0 积分 收藏

Java设计模式——建造者模式

构建器模式通过使用简单对象,逐步地构建复杂对象, 它是一种创建模式。

举例说明:

  • 假设我们去快餐店吃饭,那里有汉堡和冷饮。

  • 汉堡有可能是素食汉堡(Veg Burger)或鸡肉堡(Chicken Burger),它们都是用包装纸包装的。

  • 冷饮有可能是可乐(coke)或者百事可乐(pepsi),它们都是用瓶子装的。

  • 我们将创建一个表示食品(如汉堡和冷饮)信息的 Item 接口(名称、打包方式、价格),以及实现 Item 接口的具体类。

  • 同时再创建一个表示打包方式(如汉堡用包装纸包装,可乐用瓶子装)的Packing接口以及Packing的具体类。

  • 然后,创建一个Meal类,它包含食物的信息(Item)。

  • 最后,创建一个MealBuilder类,用来生产各种Meal。

1、创建Item 接口和Packing接口

//  Itempublic interface Item {   public String name();   public Packing packing();   public float price();	}// Packingpublic interface Packing {   public String pack();}

2、创建Packing接口的实现类

//   Wrapperpublic class Wrapper implements Packing {   @Override   public String pack() {      return "Wrapper";   }}// Bottlepublic class Bottle implements Packing {   @Override   public String pack() {      return "Bottle";   }}

3、创建Item接口的抽象类,实现了默认的打包方式功能

// Burgerpublic abstract class Burger implements Item {   @Override   public Packing packing() {      return new Wrapper();   }   @Override   public abstract float price();}// ColdDrinkpublic abstract class ColdDrink implements Item {	@Override	public Packing packing() {       return new Bottle();	}	@Override	public abstract float price();}

4、创建汉堡和冷饮的实现类  

//  VegBurgerpublic class VegBurger extends Burger {   @Override   public float price() {      return 25.0f;   }   @Override   public String name() {      return "Veg Burger";   }}// ChickenBurgerpublic class ChickenBurger extends Burger {   @Override   public float price() {      return 50.5f;   }   @Override   public String name() {      return "Chicken Burger";   }}// Cokepublic class Coke extends ColdDrink {   @Override   public float price() {      return 30.0f;   }   @Override   public String name() {      return "Coke";   }}// Pepsipublic class Pepsi extends ColdDrink {   @Override   public float price() {      return 35.0f;   }   @Override   public String name() {      return "Pepsi";   }}

5、创建Meal类,包含食物信息(Item)  

import java.util.ArrayList;import java.util.List;public 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 对象的构建器类  

public 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;   }}

7、测试,BuiderPatternDemo 使用 MealBuider 来演示构建器模式  

public class BuilderPatternDemo {   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());   }}

8、测试结果

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

 

posted @ 2022-04-07 21:46 iceriver315 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员