建造者模式

纯粹学习笔记。

使用多个简单的对象构造成复杂对象。
一个builder会一步一步的构造成最终的对象。该builder类是独立于其他对象的。
主要用在一个复杂对象的创建。每个子对象实现逻辑可以改变,但是组合在一起之后的逻辑不变。
适用场景:生成的对象具有复杂的内部结构。生成的对象内部本身相互依赖。

案例

一个套餐: 汉堡(Burger)和冷饮(Colddrink),汉堡可以是素食汉堡和鸡肉汉堡,包装是纸质的。冷饮可以是可乐(coke)和百事(pepsi),包装是瓶子。


Item.java
  public interface Item {
    public String name();
    public Packing packing();
    public float price();
  }
Packing.java
  public interface Packing {
    public String pack();
  }

创建Packing接口的实体类。

Wrapper.java
public class Wrapper  implements Packing {
  @Override
  public String pack() {
    return "Wrapper";
  }
}
Bottle.java
public class Bottle implements Packing {
  @Override
  public String pack() {
    return "Bottle";
  }
}
Burger.java
  public abstract class Burger implements Item {
    @Override
    public Packing packing() {
      return new Wrapper();
    }
    @Override
    public abstract float price();
  }
ColdDrink.java
  public abstract class ColdDrink implements Item {
    @Override
    public Packing packing() {
      return new Bottle();
    }
    @Override
    public abstract float price();
  }
VegBurger.java
  public class VegBurger extends Burger {
    @Override
    public String name() {
      return "VegBurger";
    }
    @Override
    public float price() {
      return 25.0f;
    }
  }
ChickenBurger.java
  public class ChickenBurger extends Burger {
    @Override
    public String name() {
      return "ChickenBurger";
    }
    @Override
    public float price() {
      return 50.5f;
    }
  }
Coke.java
  public class Coke extends ColdDrink {
    @Override
    public String name() {
      return "Coke";
    }
    @Override
    public float price() {
      return 30.0f;
    }
  }
Pepsi.java
  public class Pepsi extends ColdDrink {
    @Override
    public String name() {
      return "Pepsi";
    }
    @Override
    public float price() {
      return 35.0f;
    }
  }
Meal.java
  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 getCoat() {
      float coats = 0.0f;
      for (Item item : items) {
        coat += item.price();
      }
      return coats;
    }
  }
MealBuilder.java
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;
   }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转:http://www.runoob.com/design-pattern/builder-pattern.ht...
    right_33cb阅读 181评论 0 0
  • 建造者模式(Builder Pattern) 使用多个简单的对象一步一步构建成一个复杂的对象。一个 Builder...
    愤怒皮卡阅读 646评论 1 2
  • 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的...
    卢二牛阅读 1,785评论 2 2
  • 定义 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模...
    4ea0af17fd67阅读 227评论 0 1
  • [TOC] 《建造者解析》 例子 分析 步骤 1、创建 :食物条目类Item{名称 、 包装 、 价格 、}和食...
    死磕自己阅读 865评论 0 1