建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

    • 1、类型
    • 2、定义
    • 3、UML图
    • 4、四个角色
    • 5、代码
    • 6、应用场景

1、类型

创建型
解释:设计模式的创建性类型是一种软件设计模式,它专注于对象的创建机制,帮助我们更加灵活地创建对象实例。创建性设计模式主要关注如何更好地创建对象,以及如何将对象与其创建方式分离,从而使系统更加灵活、可扩展和易于维护。

常见的创建性设计模式包括:

  • 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪个类。这样在不改变该类的用户的情况下,可以修改实例化的具体类。

  • 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

  • 建造者模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。

  • 原型模式(Prototype Pattern):用于创建重复的对象,同时又能保证性能。

2、定义

创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象

何时使用:一些基本部件不会变,而其组合经常变化的时候。

3、UML图

在这里插入图片描述

4、四个角色

  1. Product(产品角色): 一个具体的产品对象。

  2. Builder(抽象建造者): 创建一个Product对象的各个部件指定的接口/抽象类。

  3. ConcreteBuilder(具体建造者): 实现接口,构建和装配各个部件。

  4. Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个 复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

5、代码

// 产品角色
@Data
@ToString
public class Product {
    /**
     * 名称
     */
    private String name;
    /**
     * 价格
     */
    private Integer price;
}
// 抽象建造者
public abstract class Builder {


    public abstract void setProductName();

    public abstract void SetProductPrice();

    public abstract Product createProduct();

}
// 具体建造者1
public class ProductOne extends Builder {
    public Product product=new Product();

    public void setProductName() {
        this.product.setName("产品1");
    }

    public void SetProductPrice() {
        this.product.setPrice(100);
    }

    public Product createProduct() {
        return this.product;
    }

}
// 具体建造者2
public class ProductTwo extends Builder {
    public Product product = new Product();

    public void setProductName() {
        this.product.setName("产品2");
    }

    public void SetProductPrice() {
        this.product.setPrice(200);
    }

    public Product createProduct() {
        return this.product;
    }
}
//指挥者
public class Director {
    Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Product assemble() {
        this.builder.setProductName();
        this.builder.SetProductPrice();
        return this.builder.createProduct();
    }
}
// 客户端
public class Client {
    public static void main(String[] args) {

        Director director = new Director(new ProductOne());
        Product product = director.assemble();
        System.out.println(product);


        Director director1 = new Director(new ProductTwo());
        Product product1 = director1.assemble();
        System.out.println(product1);
    }
}

6、应用场景

  • 创建复杂对象:当需要创建一个复杂的对象,该对象拥有多个组成部分(例如具有多个属性或配置选项)且这些组成部分之间存在特定的创建顺序或依赖关系时,建造者模式可以很好地解决这种情况。

  • 需要创建不同表示的对象:如果希望在创建过程中能够灵活地控制对象的创建过程,以便根据不同的需求创建不同表示的对象,建造者模式是一个很好的选择。

  • 创建过程需要隔离:在某些情况下,我们希望将对象的构建过程与其最终表示分离开来,以便能够更加灵活地控制对象的创建过程。建造者模式正是为此而设计的。

  • 需要避免构造器参数过多:当一个类的构造函数参数过多或者存在多个重载的构造函数时,可以考虑使用建造者模式,通过链式调用的方式,使得参数设置更加清晰、易读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/126447.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小程序如何部署SSL证书

微信小程序开发前提必须拥有一本SSL证书,办理SSL证书之前确保好指定的微信小程序开发接口使用的域名,如果没有域名的提前申请好,并且到国内服务器提供商去办理备案。 了解微信小程序使用SSL证书的作用,包括以下三个方面&#xff1…

了解web框架

Web框架前戏 Web框架本质 web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,学者们也可以从架构层面上先简单的将Web框架看做是对前端、数据库的全方位整合 纯手撸web框架 …

【k8s-1】基于docker Desktop一键式搭建k8s环境

在docker desktop中一键启动k8s环境很简单。 下面介绍如何启动dashboard,dashboard仪表盘是新手学习k8s至关重要的一个工具。 1、配置控制台 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml 2、开…

阿里云服务器u1和e实例有什么区别?哪个比较好?

阿里云服务器u1和e实例有什么区别?哪个比较好?通用算力型u1比较好,因为u1服务器是独享型云服务器,e实例是共享型。 阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别?如何选择?ECS经济型e实例是共…

解决 win11 vmware 中centos 网络不能访问外网

解决 win11 vmware 中centos 网络不能访问外网 1、进入win11 高级设置,找到centos 虚拟机使用的网卡 2、看网卡的其他属性 3、按照红圈部分,配置成一样的就行 4、进入到虚拟机配置中,配置成如图一样的NAT模式 5、再进入编辑 -》虚拟网络编辑…

U盘插在电脑上显示要格式化磁盘怎么办

U盘是一种便携式存储设备,广泛应用于各种场合。然而,有时候我们可能会遇到一些问题,比如将U盘插入电脑后显示要格式化磁盘,这通常意味着U盘的分区出现了问题或者U盘的文件系统已经损坏。这种情况下,我们应该如何解决呢…

浅谈智能型电动机保护器在孟加拉水泥厂的应用

摘要:电动机设备是水泥企业中应用较广泛的动力装置,而水泥生产企业属于能耗高、污染大又需要设备连续不间断工作的行业,电动机作为水泥行业设备的动力来源,其安全、稳定可靠的运转对水泥行业的平稳生产起着至关重要的作用。 Abst…

java正则表达式(Pattern类和Matcher类)

文章目录 前言一、Java中使用正则表达式①捕获组②Pattern类与Matcher类Pattern类:Matcher类:Pattern类&Matcher类方法:Pattern类调用方法(静态方法):1、public static Pattern compile(String regex)2、public st…

【星海出品】flask 与docker

import os from flask import Flask, request from flask import Response, make_response, jsonify import cv2 import base64 import io import uuid from main import eye ​ app Flask(__name__)​ app.route(/, methods[GET, POST]) # 添加路由blend def upload_file():…

互联网常见职称

1、管理层 CEO – Chief Executive Officer 首席执行官 VP – Vice President 副总裁 HRD – Humen Resource Director 人力资源总监 OD – Operations Director 运营总监 MD – Marketing Director 市场总监 GM – General Manager 总经理 PM – Production Manager 产品…

【T3】畅捷通T3采购管理模块反结账,提示:本年数据已经结转,不能取消结账。

【问题描述】 使用畅捷通T3软件过程中, 针对以前年度进行反结账过程中,遇到采购管理模块取消12月份结账, 提示:本年数据已经结转,不能取消结账。 【分析需求】 按正常逻辑,需要清空新年度数据&#xff0c…

TinyEngine 开源低代码引擎首次直播答疑QA合集

前言 10月27日晚8点,OpenTiny 社区开启了 TinyEngine 开源低代码引擎首次答疑直播,本次直播我们通过收集开发者诉求,精心策划和组织了内容,希望提供给大家最明确和清晰的答疑方式。这是 TinyEngine 低代码引擎直播计划的开端&…

【大模型-第一篇】在阿里云上部署ChatGLM3

前言 好久没写博客了,最近大模型盛行,尤其是ChatGLM3上线,所以想部署试验一下。 本篇只是第一篇,仅仅只是部署而已,没有FINETUNE、没有Langchain更没有外挂知识库,所以从申请资源——>开通虚机——>…

【中国知名企业高管团队】系列63:青岛啤酒

前两天介绍了总部位于青岛的中国以家电起家的两个巨头——海尔、海信。今天介绍总部位于青岛的另一个知名企业,而且最近被“一泡尿”送上风口浪尖带来巨大损失的青岛啤酒。 一、认识青岛啤酒 爱喝酒的读者朋友?说到全国性的啤酒品牌你会想到哪个&#…

使用VSCODE链接Anaconda

打代码还是在VSCODE里得劲 所以得想个办法在VSCODE里运行py文件 一开始在插件商店寻找插件 但是没有发现什么有效果的 幸运的是VSCODE支持自己选择Python的解释器 打开VSCODE 按住CtrlShiftP 输入Select Interpreter 如果电脑已经安装上了Python的环境 VSCODE会默认选择普通…

算法之路(一)

🖊作者 : D. Star. 📘专栏 :算法小能手 😆今日分享 : 如何学习? 在学习的过程中,不仅要知道如何学习,还要知道避免学习的陷阱。1. 睡眠不足;2. 被动学习和重读;3. 强调标记或画线&am…

基于讯飞星火大语言模型开发的智能插件:小策问答

星火大语言模型是一种基于深度学习的自然语言处理技术,它能够理解和生成人类语言。这种模型的训练过程涉及到大量的数据和复杂的算法,但最终的目标是让机器能够像人一样理解和使用语言。 小策问答是一款基于星火大语言模型的定制化GPT插件小工具。它的主…

电脑硬盘数据恢复哪个好?值得考虑的 8 个硬盘恢复软件解决方案

借助硬盘恢复软件,任何人都可以在家中恢复丢失的文件,而无需任何特殊技能。事实上,最困难的一步是选择最佳解决方案,因为可用选项的数量可能有点多。幸运的是,这篇文章可以为您提供帮助。 8 款顶级硬盘数据恢复软件解决…

Spring Cloud和Kubernetes + Spring Boot 用哪个?

Spring Cloud和Kubernetes Spring Boot都是用于构建微服务架构的解决方案,它们各有优势和不足,选择哪个更好取决于你的具体需求和上下文。 Spring Cloud是一个基于Spring Boot的微服务开发框架,它提供了一套完整的微服务解决方案&#xff0…

【Java】I/O流—缓冲流的基础入门和文件拷贝的实战应用

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:你能坚持到什么程度,决定你能达到什么高度 📢欢迎大家关注🔍点赞👍收藏⭐️留言📝 文章目录 一.&…