设计模式(四)—— 建造者模式(定义、案例分析、特点、缺点)

本文详细介绍了建造者模式,一种用于创建复杂对象的创建型设计模式。通过分离对象构建与表示,建造者模式使得构建过程可以创建不同表示的对象。文章以KFC套餐为例,说明了如何利用建造者模式逐步构建复杂对象,分析了模式结构、特点和缺点,以及适用场景。最后,作者提出简化建造者模式的可能性,并分享了个人见解。

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


前言

文章内容主要参考了刘伟主编的《设计模式(第2版)》,以及自己学校华师大软院ppt的内容总结,同时也结合了自己的一些思考和理解,希望能帮到大家。


本篇文章讲解的是建造者模式。

正文

一、定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。

在这模式中,客户不需要知道复杂对象的内部组成和装配方式,只需要知道建造者的类型即可,同时,复杂对象的构建和组装会分隔开来,建造者可以定义不同的创建类型。

二、情景假设

利用建造者模式描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。

老规矩,在看代码前我们可以自己脑补你会怎么编写?是不是开始模仿工厂方法模式,具体工厂实现类提供一个build方法创建并返回复杂对象?接下来核对自己的想法叭。

三、情景分析

关于上面情景的类图(具体分析在下面)
在这里插入图片描述

首先肯定会有个Meal套餐类,和我们之前有个电视TV类一样,但因为它是个复杂对象,里面有大量的属性(而且其实和可能是其他各种类),然后配备了getter和setter方法。还有不同的是这个meal尽管创建出来也是个空的,它其实更像是一个空的躯壳,而不像之前的工厂方法模式中每个TV都会有个具体实现TV类。meal的填充交由给了建造者进行填充,而不是自己去实现,同时我们也要考虑创建过程的自定义问题。所以设置只有一个空壳的Meal类。(其实有抽象类TV的味道)

//产品类Meal(套餐类)
public class Meal
{
   
	private String food;
	private String drink;
	
	public setter...
	public getter...
}

接下来就是需要有一个Meal的填充实现类,也就是建造者类去构建填充产品Meal,先定义一个抽象类,之后再具体实现各个建造者,一个具体的建造者相当于确定一个具体的产品类。(其实有点像是TV的抽象实现类ConcreteTV,只是拆分成了两部分)

//抽象类MealBuilder
public abstract class MealBuilder
{
   
	protected Meal meal = new Meal();
	
	public abstract void buildFood();
	public abstract void buildDrink();
	public Meal getMeal(){
   
		return meal;
	}
}

//具体实现类
//SubMealBuilderA
public class SubMealBuilderA implements 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值