浅析建造者模式

server/2024/10/21 23:11:11/

建造者模式


一、基础知识介绍

1. 问题引出

image-20241013164322347

上图面存在的问题:产品和产品创建的过程是封装在一起的。耦合性太强

解决方法: 将二者解耦和

2.建造者模式介绍

将复杂对象的构造过程抽象出来,用户不用知晓里面的构建细节

3.四个角色

建造者模式的四个角色

  1. Product(产品角色):一个具体的产品对象。
  2. Builder(抽象建造者):创建一个 Product 对象的各个部件指定的接口/抽象
  3. ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。
  4. Director(指挥者):构建一个使用 Builder 接口的对象。它主要是用于创建一个复杂的对象。
4.类图

image-20241013165353348

二、实际案例设计

1.类图

image-20241013195947773

2.具体代码(最主要的俩)

HouseBuilder

java">package com.lucifer.A06_Builder.improve;
//抽象的建造者
public abstract class HouseBuilder {protected House house = new House();public abstract void buildBasic();//砌墙public abstract void buildWalls();//封顶public abstract void buildRoofs();//建造完后,把产品返回public House buildHouse(){return  house;}
}

HouseDirctor

java">package com.lucifer.A06_Builder.improve;
//制作流程由这个类去实现
public class HouseDirctor {HouseBuilder houseBuilder = null;//构造器传入public HouseDirctor(HouseBuilder houseBuilder){super();this.houseBuilder = houseBuilder;}//setter传入public void setHouseBuilder(HouseBuilder houseBuilder){this.houseBuilder = houseBuilder;}//建造房子的过程,由指挥者去指挥public House constructHouse(){houseBuilder.buildBasic();houseBuilder.buildWalls();houseBuilder.buildRoofs();return houseBuilder.buildHouse();}
}
3.结果

image-20241013200410474

三、注意事项

  1. 客户端(使用程序)不必知道产品内部组成的细节

  2. 每一个具体建造者都相对独立,而与其他的具体建造者无关

  3. 可以更加精细地控制产品的创建过程,将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,
    也更方便使用程序来控制创建过程

  4. 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭
    原则”

  5. 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,因
    此在这种情况下,要考虑是否选择建造者模式.


http://www.ppmy.cn/server/133742.html

相关文章

centos8配置java环境变量jdk8u422-b05

1. 下载 JDK 8u422-b05 首先,确保已经下载了 JDK 8u422-b05 的二进制文件。如果还没有下载,你可以去 Oracle 官方网站或者其他可信的源下载 JDK 8u422。 2. 安装 JDK 将下载的 JDK 文件解压到 /usr/local/java 目录下: sudo mkdir /usr/l…

Spire.PDF for .NET【页面设置】演示:从 PDF 中删除页面

PDF 文档可以包含多个页面,这些页面具有不同的文本内容、图像或其他对象。有时,用户可能需要删除某些页面,这些页面包含不正确绘制的对象或与文档主题无关的页面。本文将演示如何使用Spire.PDF for .NET以编程方式从现有 PDF 文档中删除/移除…

移动 Web 核心笔记 (三)

移动适配 屏幕分辨率: 纵横向上的像素点数,单位是px PC 分辨率 1920 * 1080 1366 * 768 …… 缩放 150% 1920 / 150% 1080 / 150% 总结 硬件分辨率 → 物理分辨率(出厂设置) 缩放调节的分辨率 → 逻辑分辨率(软件/驱动设…

七天入门LLM大模型 |提示词工程-Prompt Engineering

标题00 引 言 前一天我们讲到:prompt(提示词)是我们和LLM互动最常用的方式,我们提供给LLM的Prompt作为模型的输入,并希望LLM反馈我们期待的结果。 虽然LLM的功能非常强大,但LLM对提示词(prom…

jmeter中发送post请求遇到的问题

用jmeter发送post请求,把请求参数放在Body Data处,参数都写得正确,但没想到结果每次都报错,直接响应结果乱七八糟,改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…

ES推荐搜索、自动补全,并且springBoot集成

推荐搜索 在搜索过程中,因为单词的拼写错误,没有得到任何的结果,希望ES能够给我们一个推荐搜索。 GET movies/_search {"suggest": {# title_suggestion为我们自定义的名字"title_suggestion": {"text": &qu…

SpringBoot启动web项目的最少依赖

1、pom.xml 文件&#xff1a;启动web项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"htt…

PetaLinux工程的常用命令——petalinux-config

petalinux-config&#xff1a;使用菜单配置项目或指定组件。 注&#xff1a;有些命令我没用过&#xff0c;瞎翻译有可能会翻译错了。 用法: petalinux-config [options] {--component <COMPONENT> |--get-hw-description[SRC]} 可选参数: -h, --help 显示函数用法…