(4)Java设计模式-建造者模式
建造者模式(Builder):和工厂模式有点相似,不同的是工厂模式只负责单一对象的生产,建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。下面举个例子来研究建造者模式,我们假设一个快餐店一个典型的套餐可以是一个汉堡和一杯冷饮,也可以是多个汉堡,或者是不同味道的汉堡以及不同的冷饮。那么我们需要一个接口来描述商品,也就是汉堡或者是可乐。
1 //物品 2 public interface Thing { 3 public String name();// 商品名 4 5 public Packing packing();// 商品包装方式 6 7 }
不管是汉堡还是可乐,都需要有包装方式。我们需要一个接口描述包装方式。
1 public interface Packing { 2 String pack(); 3 }
接下来我们需要实现包装方式的接口。为商品提供包装。
1 public class Wrapper implements Packing { 2 3 @Override 4 public String pack() { 5 return "用盒子包装"; 6 } 7 8 }
1 public class Bottle implements Packing { 2 3 @Override 4 public String pack() { 5 return "用瓶子包装"; 6 } 7 8 }
有了包装方式,我们就需要产生商品
1 //物品实现类 2 public class HanBao implements Thing { 3 4 @Override 5 public String name() { 6 return "麦香鸡腿堡"; 7 } 8 9 @Override 10 public Packing packing() { 11 return new Wrapper(); 12 } 13 14 }
1 //物品实现类 2 public class KeLe implements Thing { 3 4 @Override 5 public String name() { 6 // TODO Auto-generated method stub 7 return "百事可乐"; 8 } 9 10 @Override 11 public Packing packing() { 12 // TODO Auto-generated method stub 13 return new Bottle(); 14 } 15 16 }
我们把做好的商品放入餐盘。也就是上述的物品实现类组合成新的类。
1 //餐盘 2 public class Plate { 3 private List<Thing> list = new ArrayList<Thing>(); 4 5 public void addThing(Thing thing) { 6 list.add(thing); 7 } 8 9 public void showThing() { 10 for (Thing thing : list) { 11 System.out.println("包装方式:" + thing.packing().pack() + " 物品名称:" + thing.name()); 12 } 13 } 14 }
接下来就需要建造者来根据不同的需要生产出不同的套餐。
public class Buider { public Plate meal() { Plate plate = new Plate(); plate.addThing(new HanBao()); plate.addThing(new KeLe()); return plate; } /** * ...省略一堆组合方式 * 比如需要组成两个汉堡的组合 * 两瓶可乐的组合 * 几个汉堡加一瓶可乐的组合等等 */ }
测试类
1 public class test { 2 public static void main(String[] args) { 3 Buider buider = new Buider(); 4 Plate plate = buider.meal(); 5 plate.showThing(); 6 } 7 }
运行结果
包装方式:用盒子包装 物品名称:麦香鸡腿堡
包装方式:用瓶子包装 物品名称:百事可乐
只要坚持不懈,未来一定会更好!

浙公网安备 33010602011771号