建造者模式

建造者模式

 建造者模式 主要用于创建复杂的对象集合。由构建器一步一步构建出复杂的对象。
主要有三部分,复杂的对象,构造器,组合复杂对象的简单对象。
 采用快餐店的套餐来说事,需要生成一个套餐,那么里面有汉堡和饮料,以及其它小吃,不同的套餐会存在不同的组合,这里只是以汉堡和饮料的组合来构造套餐,有蔬菜汉堡套餐,鸡肉汉堡套餐。
首先所有的套餐内的食品都需要放在一个套餐的组合(容器)内,那么他们就需要共同的特性方便有一个统一的容器来保存他们,所有的食物特性都有,包装、名称、价格。那么封装一个食物的接口(依赖倒转)
public interface Item {
	String name();
	float price();
	Packing packing();
}
在此基础上分类食物为饮料喝汉堡分别创建他们的抽象类

public abstract class Burger implements Item{//汉堡抽象类
	
	@Override
	public Packing packing() {
		return new Wrapper();
	}
}

public abstract class ColdDrink implements Item{//饮料抽象类

	@Override
	public Packing packing() {
		// TODO Auto-generated method stub
		return new Bottle();
	}
	
}

上面出现了两个未知类Wrapper喝Bottle,它们分别代表了不同的包装方式,为了使用它们组合复杂的对象,它们也需要在任何地方能用父类指向子类对象。抽象

public interface Packing {
	String pack();
}
分别实现不同的包装Wrapper和Bottle

public class Bottle implements Packing{
	
	@Override
	public String pack() {
		// TODO Auto-generated method stub
		return "Bottle";
	}

}

public class Wrapper implements Packing{

@Override

public String pack() {

// TODO Auto-generated method stub

return "Wrapper";

}


}


有了包装那么就剩下具体摸一个食物的名称及价格

public class ChickenBurger extends Burger{


@Override

public String name() {

// TODO Auto-generated method stub

return "Chicken Burger";

}

@Override

public float price() {

// TODO Auto-generated method stub

return 25.6f;

}

}

public class VegBurger extends Burger{


@Override

public String name() {

// TODO Auto-generated method stub

return "VegBurger";

}

@Override

public float price() {

// TODO Auto-generated method stub

return 15.3f;

}

}

public class Coke extends ColdDrink{


@Override

public String name() {

// TODO Auto-generated method stub

return "coke";

}

@Override

public float price() {

// TODO Auto-generated method stub

return 3f;

}

}


public class Orange extends ColdDrink{


@Override

public String name() {

// TODO Auto-generated method stub

return "Oragne";

}

@Override

public float price() {

// TODO Auto-generated method stub

return 4.5f;

}

}



现在具体的食物类已经创建完毕,那么就需要放他们的容器(套餐类)

public class Meal {


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

public void addItem(Item item){

items.add(item);

}

public float getCost(){

float totalCost = 0;

for(Item item : items){

totalCost+=item.price();

}

return totalCost;

}

public void showItems(){

for (Item item : items) {

System.out.print("Name:"+item.name()+"\t");

System.out.print("Packing:"+item.packing().pack()+"\t");

System.out.println("Price:"+item.price());

}

}

}


接下来那么就需要构造套餐了,需要构造器

public class MealBuilder1 {


Meal meal = new Meal();

public Meal create(){

return meal;

}

public MealBuilder1 addBurger(Burger burger){

meal.addItem(burger);

return this;

}

public MealBuilder1 addColdDrink(ColdDrink coldDrink){

meal.addItem(coldDrink);

return this;

}

}


使用构造器生产套餐

public static void main(String[] args){

MealBuilder1 builder1 = new MealBuilder1();

Meal vegMeal = builder1.addBurger(new VegBurger()).addColdDrink(new Orange()).create();

vegMeal.showItems();

System.out.println("Totlal Price:"+vegMeal.getCost());

MealBuilder1 builder2 = new MealBuilder1();

Meal chickenMeal = builder2.addBurger(new ChickenBurger()).addColdDrink(new Coke()).create();

chickenMeal.showItems();

System.out.println("Total Price:"+chickenMeal.getCost());

}

UML图就不上传了,有兴趣可以去 菜鸟教程看看
总结:建造者模式就是利用建造器不断地给最终的产品不断添加不同的新对象,但是这些子对象需要有相同的特性以便于减少最终对象中的子类型对象定义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值