设计模式3-建造者模式

设计模式3-建造者模式

一、建造者模式是什么:

    建造者模式是设计模式的一种,将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。

二、建造者模式原理:

    将多个对象之间变化和不变化的分离开来,再加上一个创建管理类来管理区分。

三、建造者模式优劣点:

    优点:1.建造者独立,,易扩展。2.便于控制细节风险。3.使用者来说比较方便,只是引用其简单的属性方法来就可以达到期望。

    缺点:1.产品必须有共同点,范围有限制。2.入内部变化复杂,会有很多的建造类。3.难维护,使用者想修改其内部比较难

四、建造者模式应用场景:

   1.在对象内部复杂的地方使用,2.需生成的内部对象之间有共同的属性

五、建造者模式注意事项:

   建造者模式和工厂模式非常相似,工厂模式是建造者的最简单的一种形式。

六、建造者模式实现例子:

  1.抽象产品类Item,Packing,Buger;Bottle,Wrapper:

 

Item(菜单项)

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

Packing(包装)

 

public interface Packing {
	public String pack();
}

Burger(汉堡)

public abstract class Burger implements Item{

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

   public abstract float price();
}

Bottle(瓶子)

public class Bottle implements Packing {

	public String pack() {
		// TODO Auto-generated method stub
		return "Bottle";
	}

}

Wrapper(封装)

public class Wrapper implements Packing  {



	public String pack() {
		// TODO Auto-generated method stub
		return "Wrapper";
	}
}

2.具体产品类:ChickenBurger,Coke,ColdDrink,Pepsi

ChickenBurger(鸡肉汉堡)

public class ChickenBurger extends Burger {

	public String name() {
		// TODO Auto-generated method stub
		return "Chicken Burger";
	}

	@Override
	public float price() {
		// TODO Auto-generated method stub
		return 50.5f;
	}

}

Coke(蛋糕)

public class Coke extends ColdDrink {

	public String name() {
		// TODO Auto-generated method stub
		return "Coke";
	}

	@Override
	public float price() {
		// TODO Auto-generated method stub
		return 3.25f;
	}

ColdDrink(冷饮)

public abstract class ColdDrink implements Item {

	

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

	 public abstract float price();

}

Pepsi(百事可乐)

public class Pepsi extends ColdDrink {

	public String name() {
		// TODO Auto-generated method stub
		return "Pepsi";
	}

	@Override
	public float price() {
		// TODO Auto-generated method stub
		return 36.2f;
	}
}

3.构造者具体类:Menu,MenuBuilder

Menu(菜单)

public class Menu {
	private List<Item> items =new ArrayList<Item>();
	public void addItem(Item item){
		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());
			System.out.println(",Price:"+item.price());			
		}
	}
}

MenuBuilder(菜单管理者)

public class MenuBuilder {
	public Menu prepareVegMenu(){
		Menu menu = new Menu();
		menu.addItem(new ChickenBurger());
		menu.addItem( new Coke());
		return menu;
	}
	public Menu prepareNonMenu(){
		Menu menu = new Menu();
		menu.addItem(new ChickenBurger());
		menu.addItem( new Pepsi());
		return menu;
	}
}

 

4.成果显示类:Demo

 

public class Demo {
	public static void main(String[] args){
		MenuBuilder mealBuilder = new MenuBuilder();

		Menu vegMenu = mealBuilder.prepareVegMenu();
	      System.out.println("Veg Meal");
	      vegMenu.showItems();
	      System.out.println("Total Cost: " +vegMenu.getCost());

	      Menu nonVegMenu = mealBuilder.prepareNonMenu();
	      System.out.println("\n\nNon-Veg Meal");
	      nonVegMenu.showItems();
	      System.out.println("Total Cost: " +nonVegMenu.getCost());
	}
}

5.结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值