设计模式学习与整理-建造者模式

介绍

我们假设一个快餐店的案例,快餐店中有很多种类的汉堡、薯条和饮料。客人每次点的餐都可能不一样。这样这些食物的搭配就会有很多种。

建造者模式(Builder Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

应用场景

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

代码案例

模拟上面的快餐店例子,创建菜单项接口:

public interface Item {
  String name();
}

创建具体的食物:

public class ChickenBurger implements Item {

  @Override
  public String name() {
    return "鸡腿堡";
  }
}

public class VegBurger implements Item {

  @Override
  public String name() {
    return "素食汉堡";
  }
}

public class Coke implements Item {
  @Override
  public String name() {
    return "可口可乐";
  }
}

public class Pepsi implements Item {

  @Override
  public String name() {
    return "百事可乐";
  }
}

订单接口:

public class Meal {
  private List<Item> items = new ArrayList<Item>();

  public void addItem(Item item){
    items.add(item);
  }

  public void showItems(){
    for (Item item : items) {
      System.out.println("菜单项 : "+item.name());
    }
  }
}

建造者类:

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

测试方法:

  public static void main(String[] args) {
    MealBuilder mealBuilder = new MealBuilder();
    Meal vegMeal = mealBuilder.prepareVegMeal();
    System.out.println("素食套餐");
    vegMeal.showItems();

    Meal nonVegMeal = mealBuilder.prepareNonVegMeal();
    System.out.println("\n非素食套餐");
    nonVegMeal.showItems();
  }

优点

(1)建造者独立,易扩展
(2)便于控制细节风险

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值