23种设计模式(4)建造者模式(Builder模式)

建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节

以肯德基套餐为例
1、产品角色
创建一个产品类Meal

public class Meal {
    private String food;
    private String drink;

    public String getFood() {
        return food;
    }	
    public void setFood(String food) {
        this.food = food;
    }	
    public String getDrink() {
        return drink;
    }	
    public void setDrink(String drink) {
        this.drink = drink;
    }
}

2、抽象建造者
创建一个Product对象的各个部件指定的抽象类

public abstract class MealBuilder {
    Meal meal = new Meal();
    
    public abstract void buildFood();
    
    public abstract void buildDrink();
    
    public Meal getMeal(){
        return meal;
    }
}

3、具体建造者
继承抽象类,构建和装配各个部件
A套餐:

public class MealA extends MealBuilder{
    public void buildDrink() {
        meal.setDrink("可乐");
    }
    public void buildFood() {
        meal.setFood("薯条");
    }
}

B套餐:

public class MealB extends MealBuilder{
    public void buildDrink() {
        meal.setDrink("柠檬果汁");
    }
    public void buildFood() {
        meal.setFood("鸡翅");
    }
}

4、指挥官
构建一个使用Builder接口的对象

public class KFCWaiter {
    private MealBuilder mealBuilder;
    
    public KFCWaiter(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }    
    public Meal construct(){
        //准备食物
        mealBuilder.buildFood();
        //准备饮料
        mealBuilder.buildDrink();        
        //准备完毕,返回一个完整的套餐给客户
        return mealBuilder.getMeal();
	 }
}

5、测试类

public class Test {
   public static void main(String[] args) {
        //套餐A
        MealA a = new MealA();
        //准备套餐A的服务员
        KFCWaiter waiter = new KFCWaiter(a);
        //获得套餐
        Meal mealA = waiter.construct();      
        System.out.print("套餐A的组成部分:");
        System.out.println("食物:"+mealA.getFood()+";   "+"饮品:"+mealA.getDrink());
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值