Java建造者(Builder)模式

Java建造者(Builder)模式

 

构建器(Builder)模式使用简单对象并使用逐步方法构建复杂对象。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。

 

构建器(Builder)模式构建器逐步构建最终对象,此构建器独立于其他对象。

 

实例实例

 

我们考虑了一家快餐店的商业案例,其中典型的餐点可能是汉堡和冷饮。汉堡可以是一个素食汉堡或鸡肉汉堡,将被包装进行包装。冷饮可以是一个可乐或百事将装放在一个瓶子中。

 

我们将创建一个Item接口,表示食品项目,如汉堡包和冷饮料以及实现Item接口的具体类。还有一个包装接口,表示食品包装和实现包装接口的具体类,因为汉堡包装在包装和冷饮将包装成瓶子。

 

然后创建一个具有ItemListListMealBuilderMeal类,通过组合Item来构建不同类型的Meal对象。BuilderPatternDemo这是一个演示类将使用MealBuilder构建一个食品套餐。

 

 

1

 

创建两个接口分别代表食品和包装的项目(Item Packing),如下所示 -

 

Item.java

 

 

 

public interface Item {

   public String name();

   public Packing packing();

   public float price();   

}

Java

Packing.java

 

public interface Packing {

   public String pack();

}

Java

2

 

创建实现Packing接口的具体类。如下代码所示 -

 

Wrapper.java

 

public class Wrapper implements Packing {

 

   @Override

   public String pack() {

      return "Wrapper";

   }

}

Java

Bottle.java

 

public class Bottle implements Packing {

 

   @Override

   public String pack() {

      return "Bottle";

   }

}

Java

3

 

创建抽象类实现Item接口提供默认功能。

 

Burger.java

 

public abstract class Burger implements Item {

 

   @Override

   public Packing packing() {

      return new Wrapper();

   }

 

   @Override

   public abstract float price();

}

Java

ColdDrink.java

 

public abstract class ColdDrink implements Item {

 

    @Override

    public Packing packing() {

       return new Bottle();

    }

 

    @Override

    public abstract floatprice();

}

Java

4

 

创建扩展汉堡(Burger)和冷饮(ColdDrink )类的具体类

 

VegBurger.java

 

public class VegBurger extends Burger {

 

   @Override

   public float price() {

      return 25.0f;

   }

 

   @Override

   public String name() {

      return "VegBurger";

   }

}

Java

ChickenBurger.java

 

 

public class ChickenBurger extends Burger {

 

   @Override

   public float price() {

      return 50.5f;

   }

 

   @Override

   public String name() {

      return "ChickenBurger";

   }

}

Java

Coke.java

 

public class Coke extends ColdDrink {

 

   @Override

   public float price() {

      return 30.0f;

   }

 

   @Override

   public String name() {

      return "Coke";

   }

}

Java

Pepsi.java

 

public class Pepsi extends ColdDrink {

 

   @Override

   public float price() {

      return 35.0f;

   }

 

   @Override

   public String name() {

      return "Pepsi";

   }

}

Java

5

 

创建一个具有上面定义的Item对象的Meal类。

 

Meal.java

 

import java.util.ArrayList;

import java.util.List;

 

public class Meal {

   private List<Item> items= new ArrayList<Item>();   

 

   public void addItem(Itemitem){

      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());

      }       

   }   

}

Java

6

 

创建一个MealBuilder类,这是一个实际的构建类负责创建Meal对象。

 

MealBuilder.java

 

 

public class MealBuilder {

 

   public Meal prepareVegMeal (){

      Meal meal = new Meal();

      meal.addItem(newVegBurger());

      meal.addItem(new Coke());

      return meal;

   }  

 

   public Meal prepareNonVegMeal(){

      Meal meal = new Meal();

      meal.addItem(newChickenBurger());

      meal.addItem(new Pepsi());

      return meal;

   }

}

Java

7

 

BuiderPatternDemo类使用MealBuider对象来演示构建器模式。

 

BuilderPatternDemo.java

 

public class BuilderPatternDemo {

   public static voidmain(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());

   }

}

Java

8

 

验证输出,执行上面代码得到如下结果 -

 

Veg Meal

Item : Veg Burger, Packing : Wrapper, Price : 25.0

Item : Coke, Packing : Bottle, Price : 30.0

Total Cost: 55.0

 

 

Non-Veg Meal

Item : Chicken Burger, Packing : Wrapper, Price : 50.5

Item : Pepsi, Packing : Bottle, Price : 35.0

Total Cost: 85.5

Java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值