设计模式(5)--反向理解建造者模式

本文介绍了建造者模式的概念、应用场景及其实现方式。适用于对象由多个简单对象组合而成且组合不断变化的情况,例如套餐的组合。文章还展示了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是建造者模式?
建造者模式是一种创建行为模式,为了是创建对象而存在的设计模式,当对象是由多个简单对象组合而成,且对象组合不断变化的时候,这个对象的创建可以考虑使用建造者模式。

什么时候使用?
对象由多个简单对象组合而成,且对象的组合不断变化的时候。 例如汉堡、可乐可以看做成简单的对象,套餐是我们要创建的对象,套餐包含的对象的种类是不断变化的,套餐的创建就适合使用建造者模式。

有什么缺点?
1,建造者模式构建对象中的简单对象必须有公共的特点(继承自同一接口),使用范围有限。
2,内部逻辑复杂,增加了代码的层级

建造者实现:
以网上的餐厅套餐组合为例,一个套餐由汉堡和饮料组合而成。
首先要实现这个需求,我们要有个套餐类,这个类可以准备不同套餐,这个类也是实现建造者的关键。

public class MealBulider {
    public Meal prepareVegMeal(){
        Meal meal = new Meal();
        meal.addItem(“一种汉堡”);
        meal.addItem(“一种可乐”);
        return meal;
    }
    public Meal prepareChickMeal(){
        Meal meal = new Meal();
        meal.addItem(“另一种汉堡”);
        meal.addItem(“另一种可乐”);
        return meal;
    }
}

这个类就是我们说的创建者,这个准备套餐就很容易了,不断的向Item中加产品(简单对象)就可以了, 然后想想如何创建Meal这个类呢? meal中必包含一个产品的List,用于保存汉堡,可乐等等信息,有一个添加产品的方法。

public class Meal {
    private List<Item> foodList = new ArrayList<>();

    public void addItem(Item item){
        foodList.add(item);
    }
}

然后如果汉堡和可乐都能作为一个对象添加到Item中,那么很容易知道,这两个类必须都继承同一个Item接口。【建造者缺点之一】

interface Item(){}
一种汉堡  implements Item(){}
另外一种汉堡  implements Item(){}
一种可乐  implements Item(){}
另外一种可乐  implements Item(){}

以上,我们就完成了一个简单的建造者模式。

public class Client {
    public static void main(String[] args){
        MealBulider bulider = new MealBulider();
        Meal meal  = bulider.prepareChickMeal();
        Meal meal1 = bulider.prepareVegMeal();
    }
}

这样 meal中就有了我们需要的组合,当然 我们可以根据需求对简单对象层进行拆分,提取和优化。

现在,如果有第三种套餐,两份可乐的怎么做呢?很简单,在MealBulider中添加一个方法就可以获取这个套餐对象了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注网赚的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值