设计模式详解(建造者模式)

devtools/2024/12/27 19:30:16/

1、简述

建造者模式(Builder Pattern)是一种创建型设计模式,它通过将对象的构造过程与表示分离,使得相同的构造过程可以创建不同的表示。建造者模式尤其适用于创建复杂对象的场景。

在这里插入图片描述

2、什么是建造者模式

建造者模式是一种创建型设计模式,主要用于以下场景:

  • 创建复杂对象时需要多个步骤。

  • 同样的构建过程可以生成不同类型的对象。

建造者模式的核心思想是通过分步骤地构建一个复杂对象,同时允许灵活地定制每个步骤的细节。

建造者模式包含以下几个核心角色:

  • 产品(Product):表示需要构建的复杂对象。

  • 建造者(Builder):定义创建产品各部分的抽象接口。

  • 具体建造者(Concrete Builder):实现 Builder 接口,完成具体产品各部分的构建。

  • 指挥者(Director):负责调用建造者的各个方法,按特定顺序创建产品。

3、实际案例

假设我们需要构建一个快餐套餐,套餐包括主食、饮料和甜品,建造者模式可以帮助我们灵活构建不同的套餐组合。

// 产品类

java">public class Meal {private String mainItem; // 主食private String drink;    // 饮料private String dessert;  // 甜品// Getter 和 Setterpublic String getMainItem() {return mainItem;}public void setMainItem(String mainItem) {this.mainItem = mainItem;}public String getDrink() {return drink;}public void setDrink(String drink) {this.drink = drink;}public String getDessert() {return dessert;}public void setDessert(String dessert) {this.dessert = dessert;}@Overridepublic String toString() {return "Meal [Main Item: " + mainItem + ", Drink: " + drink + ", Dessert: " + dessert + "]";}
}

// 抽象建造者

java">public interface MealBuilder {void buildMainItem();void buildDrink();void buildDessert();Meal getMeal();
}

// 具体建造者:儿童套餐

java">public class KidsMealBuilder implements MealBuilder {private Meal meal = new Meal();@Overridepublic void buildMainItem() {meal.setMainItem("Chicken Nuggets");}@Overridepublic void buildDrink() {meal.setDrink("Apple Juice");}@Overridepublic void buildDessert() {meal.setDessert("Ice Cream");}@Overridepublic Meal getMeal() {return meal;}
}

// 具体建造者:健身餐

java">public class FitnessMealBuilder implements MealBuilder {private Meal meal = new Meal();@Overridepublic void buildMainItem() {meal.setMainItem("Grilled Chicken");}@Overridepublic void buildDrink() {meal.setDrink("Protein Shake");}@Overridepublic void buildDessert() {meal.setDessert("Greek Yogurt");}@Overridepublic Meal getMeal() {return meal;}
}

// 指挥者

java">public class MealDirector {private MealBuilder mealBuilder;public MealDirector(MealBuilder mealBuilder) {this.mealBuilder = mealBuilder;}public void constructMeal() {mealBuilder.buildMainItem();mealBuilder.buildDrink();mealBuilder.buildDessert();}public Meal getMeal() {return mealBuilder.getMeal();}
}

// 测试类

java">public class BuilderPatternDemo {public static void main(String[] args) {// 创建儿童套餐MealBuilder kidsMealBuilder = new KidsMealBuilder();MealDirector kidsMealDirector = new MealDirector(kidsMealBuilder);kidsMealDirector.constructMeal();Meal kidsMeal = kidsMealDirector.getMeal();System.out.println("Kids Meal: " + kidsMeal);// 创建健身餐MealBuilder fitnessMealBuilder = new FitnessMealBuilder();MealDirector fitnessMealDirector = new MealDirector(fitnessMealBuilder);fitnessMealDirector.constructMeal();Meal fitnessMeal = fitnessMealDirector.getMeal();System.out.println("Fitness Meal: " + fitnessMeal);}
}

输出:

Kids Meal: Meal [Main Item: Chicken Nuggets, Drink: Apple Juice, Dessert: Ice Cream]
Fitness Meal: Meal [Main Item: Grilled Chicken, Drink: Protein Shake, Dessert: Greek Yogurt]

4、建造者模式的优缺点

优点

  • 分步骤构建:将复杂对象的构造过程分解为多个步骤,代码更加清晰。

  • 灵活性:同样的构造过程可以创建不同的表示。

  • 解耦:将产品的创建过程与产品本身分离。

缺点

  • 额外的类:需要为每种产品创建具体的建造者类。

  • 复杂性增加:如果产品的构建过程过于简单,使用建造者模式可能导致不必要的复杂性。

5、应用场景

  • 构建复杂对象:如构建包含多步骤的报表、表单或配置文件。

  • UI 界面生成:如构建复杂的用户界面时,可以按步骤生成组件。

  • 代码生成工具:如编译器的代码生成模块,逐步构建复杂的语法树或代码结构。


http://www.ppmy.cn/devtools/145596.html

相关文章

docker如何打包部署springboot的项目

一、将项目打包成jar包,或者war包。 首先,确保已经使用 Maven 或 Gradle 等工具将项目打包成 JAR 文件。如果使用的是 Maven,可以通过以下命令打包: #gradle 构建的项目 gradle build #mvn 构建项目、 mvn clean packege …

12.25 VScode+jupyter使用

在运行的python环境里先要确保jupyter安装好: 按下 Ctrl Shift P 打开命令面板,输入 “Jupyter: Create New Blank Notebook” 来创建一个新的 Jupyter 笔记本,或者打开现有的 .ipynb 文件。 在打开的 Jupyter 笔记本中,点击右…

医疗平板与普通平板对比:优势尽显

在当今数字化的时代,平板电脑已经成为人们生活和工作中不可或缺的一部分。而在医疗领域,医疗平板也逐渐崭露头角,与普通平板相比,它具备诸多独特的优势,能够更好地满足医疗行业的特殊需求。 一、硬件设计与防护 坚固耐…

【LeetCode】726、原子的数量

【LeetCode】726、原子的数量 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 遇到 ( 括号, 则递归计算子问题 遇到大写字母, 或遇到 ( 括号, 则清算历史, 并开始新的记录 记录由两部分组成: 大写字母开头的 …

SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

使用 C# 代码计算数学表达式

此程序展示了如何使用 C# 代码来计算数学表达式。该程序以以下代码开始。 此代码声明了一个Dictionary,稍后将使用它来保存变量。(例如,如果用户想要 A 10、B 3 和 Pi 3.14159265。) 然后它定义了一个Precedence枚举来表示运算…

原点安全再次入选信通院 2024 大数据“星河”案例

近日,中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织开展的 2024 大数据“星河(Galaxy)”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…

“信任构建”:网上购物商城的用户评价与信誉系统

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架…