【设计模式】建造器模式(Builder Pattern)

在这里插入图片描述

 

🔥 核心

通过建造器,使用多个简单的对象一步一步构造出一个复杂的对象。

 

🙁 问题场景

你现在从一名程序开发者转行为了一名房屋建筑师。你的任务就是建房子。

你很快建好了一个 房子(House) 。这个房子普普通通,压根不是什么难事儿。很快,你收到了越来越多的订单,房子好像愈加复杂了起来:

一个 带花园的房子(HouseWithGarden)
一个 带车库的房子(HouseWithGarage)
一个 带泳池的房子(HouseWithSwimmingPool)
一个 带火箭基地的的房子(HouseWithRocketBase)
一个 既带花园又带泳池的房子(HouseWithGardenAndSwimmingPool)
一个 既带车库又带泳池又带火箭基地的房子(HouseWithGardenAndSwimmingPoolAndRocketBase)

于是,你以 房子 为基类 ,派生出所有各种各样的房子的子类…等等,房子的种类实在是太多了,为每一种房子创建一个子类显然是愚蠢的行为。

你立即发现了所谓房子的本质——无非是 房子本身花园车库泳池火箭基地 的组合。所以,你可以使用一个包含所有可能参数的超级构造函数。使用超级构造函数后,的确避免了生成子类,但是这使得对于构造函数的调用十分不简洁:

new House(3, 2, 4, true, false, true, true, true, false, false, true, false, false, true, true, false);

还有什么其他的注意吗?

 

🙂 解决方案

你突然意识到,对于这种复杂对象的构造,是不可能一步到位的。

也就是说,必须使用多个简单的对象一步一步构造出一个复杂的对象。复杂对象的整个构造过程,被拆分为一个个小步骤,然后在建造器中调用一个个小步骤。

很快,你写好了以下的小步骤:

建造花园;
建造车库;
建造泳池;
建造火箭基地…

对于 既带花园又带泳池的房子 ,就可以调用 建造花园 + 建造泳池。

对于 既带车库又带泳池又带火箭基地的房子,就可以调用 建造车库 + 建造车库 + 建造火箭基地。

对于一种房子,你仅仅需要调用它需要的一组步骤即可!

 

🌈 有趣的例子

建造者模式随处可见。在餐厅里,有许多食物(蛋糕(Cake)牛肉(Beef))和饮品(咖啡(Coffee)红酒(Redwine))。它们都继承了 单品(Item) 接口。

餐厅提供了多种 套餐(Meal) 。使用建造器,就能组合出这些套餐:

1)蛋糕 + 咖啡

2)牛肉 + 红酒

在这里插入图片描述

 单品接口
interface Item {
   
    String getName();
    int getPrice();
}

 蛋糕类
class Cake implements Item {
   

    @Override
    public String getName() {
   
        return "我是一块蛋糕";
    }

    @Override
    public int getPrice() {
   
        return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值