大白话-构造者设计模式

相关资料:菜鸟教程

使用场景

使用多个简单的对象一步一步构建成一个复杂的对象。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

场景示例

1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。
2、

图解

在这里插入图片描述

案例

public class BuilderPatternDemo{
	
	
	public interface 商品项{
		// 获取商品名称
		public String name();
		// 获取打包方式
		public 打包接口 packing();
		// 获取价格
		public float price();
	}
	
	public interface 打包接口{
		public String pack();
	}
	
	public static class 纸质打包 implements 打包接口{
		@Override
		public String pack(){
			return "Wrapper(纸盒包装)";
		}
	}
	
	public static class 瓶装打包 implements 打包接口{
		
		@Override
		public String pack(){
			return "Bottle(瓶装包装)";
		}
	}
	
	public abstract static class 汉堡包 implements 商品项{
	
		@Override
		public final 打包接口 packing(){
			return new 瓶装打包();
		}
		
		@Override
		public abstract float price();
	}
	
	public abstract static class 冷饮 implements 商品项{
		
		@Override
		public final 打包接口 packing(){
			return new 瓶装打包();
		}
		
		@Override
		public abstract float price();
	}
	
	public static class 蔬菜汉堡包 extends 汉堡包{
		
		@Override
		public String name(){
			return "Veg Bugger";
		}
		
		@Override
		public float price(){
			return 10.0f;
		}
	}
	
	public static class 鸡腿汉堡包 extends 汉堡包{
		
		@Override
		public String name(){
			return "Chicken Burger";
		}
		
		@Override
		public float price(){
			return 15.0f;
		}
	}
	
	public static class 咖啡 extends 冷饮{
		
		@Override
		public String name(){
			return "咖啡";
		}
		
		@Override
		public float price(){
			return 8.0f;
		}
	}
	
	public static class 百事可乐 extends 冷饮{
		
		@Override
		public String name(){
			return "百事可乐";
		}
		
		@Override
		public float price(){
			return 5.0f;
		}
	}
	
	public static class 商品列表{
		
		List<商品项> items = new ArrayList<>();
		
		public List<商品项> addItem (商品项 item){
			items.add(item);
			return items;
		}
		
		public float getCost() {
			float cost = 0.0f;
			for(商品项 item : items){
				cost += item.price();
			}
			return cost;
		}
		
		public void showItems() {
			for(商品项 item: items){
				System.out.print("  食品:" + item.name() + " ");
				System.out.print("  打包方式:" + item.packing().pack() + "");
				System.out.println("  价格:" + item.price());
			}
			
		}
		
	}
	
	public interface 套餐 {
		public String getName();
		public 商品列表 getMeal();
	}
	
	public static class 套餐A implements 套餐 {
		@Override
		public String getName(){
			return "套餐A";
		}
		
		@Override
		public 商品列表 getMeal(){
			商品列表 meal = new 商品列表();
			meal.addItem(new 咖啡()).add(new 蔬菜汉堡包());
			return meal;
		}
	}
	
	public static class 套餐B implements 套餐 {
		@Override
		public String getName(){
			return "套餐B";
		}
		
		@Override
		public 商品列表 getMeal(){
			商品列表 meal = new 商品列表();
			meal.addItem(new 百事可乐()).add(new 鸡腿汉堡包());
			return meal;
		}
	}
	
	public static void main(String[] args) {
		
		套餐 tc = new 套餐B();
		商品列表 meal = tc.getMeal();
		
		System.out.println("套餐:" + tc.getName());
		System.out.println("商品列表:");
		meal.showItems();
		System.out.println("总消费:" + meal.getCost());
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值