news 2026/10/25 1:33:23

什么是生成器模式?一文详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是生成器模式?一文详解

目录

一.意图

二.结构

三.举例:产品套餐

1.代码实现

①创建“产品”

②创建“抽象套餐”

③创建“具体套餐1”

④创建“具体套餐2”

⑤创建“服务员”

最终,进行测试

四.真题

1.2017年上半年

题目

分析过程

正确答案

2.2018年上半年

题目

分析过程

正确答案


一.意图

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二.结构

三.举例:产品套餐

1.代码实现

①创建“产品”

//产品 public class Product { //组成产品的部件(材料) List<String> parts = new ArrayList<>(); public void add(String part){ parts.add(part); } public void show(){ System.out.println("产品的组成:"); for(String s : parts){ System.out.print(s + ""); } System.out.println("\n"); } }

②创建“抽象套餐”

//抽象套餐 public abstract class Builder { public abstract void BuildPart(); public abstract Product getResult(); }

③创建“具体套餐1”

//具体套餐1 public class Builder1 extends Builder{ //这很关键,要将产品放到具体套餐中,从而构造产品内容 Product product = new Product(); @Override public void BuildPart() { product.add("A"); product.add("B"); product.add("C"); product.add("D"); } @Override public Product getResult() { return product; } }

④创建“具体套餐2”

//具体套餐2 public class Builder2 extends Builder{ //这很关键,要将产品放到具体套餐中,从而构造产品内容 Product product = new Product(); @Override public void BuildPart() { product.add("E"); product.add("F"); product.add("G"); } @Override public Product getResult() { return product; } }

⑤创建“服务员”

//服务员 public class Director { //这是关键:这里接收的参数是“抽象套餐Builder”,将来要传入"具体套餐Builder1" or "具体套餐Builder2" public void Construct(Builder builder){ builder.BuildPart(); } }

最终,进行测试

public class Demo01Application { public static void main(String[] args) { //1.创建服务员 Director director = new Director(); //2.创建具体套餐1 Builder builder1 = new Builder1(); //3.服务员通知后厨做具体套餐1 director.Construct(builder1); //4.查看具体套餐1的内容 Product product1 = builder1.getResult(); product1.show(); //创建具体套餐2 Builder builder2 = new Builder2(); //服务员通知后厨做具体套餐2 director.Construct(builder2); //查看具体套餐2的内容 Product product2 = builder2.getResult(); product2.show(); } }

运行效果如下:

四.真题

1.2017年上半年

题目

分析过程

(1)abstract void buildParts()

由于PizzaBuilder是抽象类,且第一空的方法没有方法体,所以肯定是一个抽象方法,因此要用abstract关键字修饰;再根据子类的具体实现,发现返回值为void、方法名叫buildParts,形参列表为空。

故第一空的答案是:abstract void buildParts()


(2)this.pizzaBuilder = pizzaBuilder

故答案为:this.pizzaBuilder = pizzaBuilder


(3)pizzaBuilder.buildParts()

故答案为:pizzaBuilder.buildParts()


(4)waiter.setPizzaBuilder(hawaiian_pizzabuilder)

故答案为:waiter.setPizzaBuilder(hawaiian_pizzabuilder)


(5)waiter.construct()

故答案为:waiter.construct()

正确答案

经过对比,发现我们上述的答案全对了。

2.2018年上半年

题目

分析过程

(1)(2)

根据Builder接口的实现类,可以找出缺少的两个方法,故:

  • 第一空的答案:void buildPartA()
  • 第二空的答案:Product getResult()

(3)(4)

由于第三空和第四空,根据方法名可以知道,是在给product类的partA和partB两个属性赋值,所以要调用Product类的setPartA和setPartB,故:

  • 第三空的答案是:product.setPartA
  • 第四空的答案是:product.setPartB

(5)builder.builderPartA()或者builder.builderPartB()

故第五空的答案为:builder.builderPartA()或者builder.builderPartB()

正确答案

将我们上述的答案和正确答案对比,发现全对了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 1:26:50

Codex-X 提示词注入实战手册:回滚与开关全知道

Codex-X 提示词注入实战手册&#xff1a;回滚与开关全知道 【免费下载链接】Codex-X OpenAI Codex 桌面端/CLI 的可视化管理工具&#xff0c;具有Provider/API 切换、会话同步、提示词注入、Skills/MCP 管理、TOML 配置可视化的跨平台工具。 项目地址: https://gitcode.com/G…

作者头像 李华
网站建设 2026/10/25 1:25:18

AI通识课:零基础看懂机器学习本质与落地逻辑

简介&#xff1a;本资源是面向AI零基础学习者的人工智能通识入门课程讲义&#xff0c;聚焦概念建立、技术脉络梳理与现实应用衔接&#xff0c;帮助初学者系统构建AI认知框架&#xff0c;缓解因术语繁多、分支庞杂导致的学习畏难情绪。压缩包为单个6.25MB的PDF文件&#xff0c;完…

作者头像 李华
网站建设 2026/10/25 1:23:14

EasyGBS视频监控平台架构与智能分析技术解析

1. EasyGBS技术架构解析EasyGBS作为新一代视频监控管理平台&#xff0c;其核心架构设计充分考虑了GB28181标准的兼容性与现代智能分析需求的结合。系统采用微服务架构设计&#xff0c;主要包含以下几个关键模块&#xff1a;信令服务模块&#xff1a;基于SIP协议实现GB28181标准…

作者头像 李华
网站建设 2026/10/25 1:19:58

Headscale测试覆盖:测试策略与覆盖率分析

Headscale测试覆盖&#xff1a;测试策略与覆盖率分析 概述 Headscale作为Tailscale控制服务器的开源自托管实现&#xff0c;其测试策略和覆盖率直接关系到项目的稳定性和可靠性。本文深入分析Headscale的测试架构、策略设计以及当前测试覆盖状况&#xff0c;为开发者提供全面的…

作者头像 李华
网站建设 2026/10/25 1:19:15

Docker实战 | 使用Docker部署DumbAssets固定资产管理平台

【Docker项目实战】使用Docker部署DumbAssets固定资产管理平台一、DumbAssets介绍1.1 DumbAssets简介1.2 DumbAssets主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、拉取D…

作者头像 李华