津津乐道设计模式 - 建造者模式详解(教你如何构造一个专属女友)

news2024/9/28 3:22:44

在这里插入图片描述

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

津津乐道设计模式 - 创造者模式详解

  • 什么是建造者模式
  • 建造者模式的适用场景
  • 代码案例
  • 建造者模式优缺点
  • 结语

什么是建造者模式

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

建造者模式的适用场景

  • 创建复杂对象:当对象的创建过程较为复杂,涉及多个步骤或者有不同的配置选项时,可以使用创造者模式来将创建过程封装,并且可以灵活地构建不同的对象表示。
  • 避免构造器参数过多:如果一个对象的构造器需要传入很多参数,且这些参数有一定的组合关系,使用构造函数来创建对象会显得冗长且不易理解。而创造者模式可以通过链式调用或者方法调用的方式,使创建对象的代码更加清晰、可读性更高。
  • 对象的部分属性可选:当对象的一些属性是可选的,可以通过建造者模式提供的方法来设置这些可选属性,从而灵活地构建对象。

总的来说,建造者模式适用于需要创建复杂对象,并且希望将创建过程与对象表示分离的情况。它可以提供更好的灵活性和可读性,同时也能避免构造器参数过多和对象部分属性可选的问题。

代码案例

假设我们要创建一个女朋友对象,并且女朋友具有多个可选的特征,例如身高、体重、发色和爱好等。我们可以使用创造者模式来创建这个女朋友对象。

首先,我们定义一个女朋友类 Girlfriend,它具有身高、体重、发色和爱好等属性:

public class Girlfriend {
    private int height;
    private int weight;
    private String hairColor;
    private List<String> hobbies;

    public void setHeight(int height) {
        this.height = height;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public void setHairColor(String hairColor) {
        this.hairColor = hairColor;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
    // 省略其他方法和属性的定义
}

然后,我们定义一个女朋友构建器类 GirlfriendBuilder,它负责构建女朋友对象:

public class GirlfriendBuilder {
    private Girlfriend girlfriend;

    public GirlfriendBuilder() {
        girlfriend = new Girlfriend();
    }

    public GirlfriendBuilder setHeight(int height) {
        girlfriend.setHeight(height);
        return this;
    }

    public GirlfriendBuilder setWeight(int weight) {
        girlfriend.setWeight(weight);
        return this;
    }

    public GirlfriendBuilder setHairColor(String hairColor) {
        girlfriend.setHairColor(hairColor);
        return this;
    }

    public GirlfriendBuilder setHobbies(List<String> hobbies) {
        girlfriend.setHobbies(hobbies);
        return this;
    }

    public Girlfriend build() {
        return girlfriend;
    }
}

现在,我们可以使用创造者模式来构建女朋友对象,根据需要选择设置不同的特征:

GirlfriendBuilder builder = new GirlfriendBuilder();
Girlfriend girlfriend = builder
        .setHeight(160)
        .setWeight(50)
        .setHairColor("Brown")
        .setHobbies(Arrays.asList("旅行", "电影", "美食"))
        .build();

通过创造者模式,我们可以将女朋友对象的构建过程与表示分离开来。我们可以灵活地选择需要的特征,并且在需要的时候可以添加更多的设置方法。这样,我们可以清晰地构建不同类型的女朋友对象,并且代码可读性也得到了提高。

或许大家看到上述构建女朋友对象方法,发现了JDK中也存在类似得建造者模式,比如:StringBuilder

建造者模式优缺点

建造者模式(Builder Pattern)具有以下优点:

  • 封装性:创造者模式将对象的构建过程封装在一个独立的构建器类中,使得客户端代码与具体构建过程解耦。客户端只需要指定构建器的配置选项,而无需关心对象的具体构建细节。
  • 灵活性:创造者模式可以根据需求定制不同的构建器来创建不同的对象表示。通过链式调用或者方法调用的方式,可以灵活地设置对象的属性和选项,以获得所需的对象。
  • 可读性:使用创造者模式创建对象的代码可读性较高。通过链式调用或者方法调用的方式,可以按照一定的顺序逐步设置对象的属性,使得代码更加清晰易懂。
  • 可以创建复杂对象:创造者模式适用于创建复杂对象,特别是当对象的构建过程涉及多个步骤或者有不同的配置选项时。它可以将复杂的构建过程分解为多个简单的步骤,使得代码可维护性更高。

建造者模式也有一些缺点:

  • 增加了代码量:引入创造者模式会增加额外的构建器类和方法,从而增加了代码量。对于简单的对象创建,使用创造者模式可能会显得繁琐。
  • 对象属性修改不灵活:一旦对象构建完成,一般情况下无法直接修改对象的属性。如果需要修改已创建对象的属性,可能需要重新创建一个新的构建器来进行修改。

需要根据具体的情况来权衡使用创造者模式的优点和缺点。如果对象的构建过程较为复杂,并且需要灵活地定制不同的对象表示,那么创造者模式是一个合适的选择。但对于简单的对象创建,可以选择更简洁的方式来实现。

结语

本章节主要讲解建造者模式应用场景、建造者模式优缺点,并演示了以建造者模式构造一个专属女友的代码案例,。如果本文对你有用,欢迎关注收藏评论,后续将陆续推出贴切生活的搞笑讲解方式带大家一起学编程~

样例代码:https://github.com/lhmyy521125/toher-designmode

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试断言详解(Jmeter)

接口测试是目前最主流的自动化测试手段&#xff0c;它向服务器发送请求&#xff0c;接收和解析响应结果&#xff0c;通过验证响应报文是否满足需求规约来验证系统逻辑正确性。接口的响应类型通过Content-Type指定&#xff0c;常见的响应类型有&#xff1a; • text/html &…

Android Jetpack Compose之轻松添加分隔线:Divider组件

引言&#xff1a; 在构建用户界面时&#xff0c;有效地组织和分隔内容是至关重要的。这就是Android Jetpack Compose的Divider组件派上用场的地方。在这篇博客中&#xff0c;我们将详细了解Divider组件的功能和用法&#xff0c;并通过示例展示如何将其融入您的Compose UI。 Je…

自动化测试和性能测试面试题精选

自动化测试相关 包含 Selenium、Appium 和接口测试。 1. 自动化代码中&#xff0c;用到了哪些设计模式&#xff1f; 单例模式工厂模式PO模式数据驱动模式 2. 什么是断言&#xff1f; 检查一个条件&#xff0c;如果它为真&#xff0c;就不做任何事&#xff0c;用例通过。如果…

8年资深测试总结,自动化测试成功实施,你不知道的都在这...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么项目&#xf…

python:并发编程(二十七)

前言 本文将和大家一起探讨python并发编程的实际项目&#xff1a;Locust性能测试&#xff08;篇一&#xff0c;共N篇&#xff09;&#xff0c;系列文章将会从零开始构建项目&#xff0c;并逐渐完善项目&#xff0c;最终将项目打造成适用于高并发场景的应用。 本文为python并发…

分支定价算法求解VRPTW问题(代码非原创)

参考文献&#xff1a;微信公众号“程序猿声”关于分支定价求解VRPTW的代码 A tutorial on column generation and branch-and-price for vehicle routing problems 框架 对于VRPTW问题&#xff0c;先做线性松弛&#xff0c;调用列生成算法&#xff08;一种解决大型线性规划问…

Docker网络之Network Namespace

Docker网络中相关的命令非常少&#xff0c;但需要掌握的底层原理却又非常多。 1.Network Namespace Docker网络底层原理是Linux的Network Namespace&#xff0c;所以说对于Linux Network Namespace的理解对Docker网络底层原理的理解就显得尤为重要了。 2.需求 通过手工的方式…

ICC2与INNOVUS命令对照表

ICC2与INNOVUS命令对照表 TargetICC2INNOVUS设置多CPU set_host_options -max_cores16 setMultiCpuUsage -localCpu 16 获得物体的属性 get_attribute

DSP,国产C2000横空出世,QX320F280049,替代TI 的 TMS320F280049,支持国产

一、特性参数 1、独立双核&#xff0c;32位CPU&#xff0c;单核主频400MHz 2、IEEE 754 单精度浮点单元 &#xff08;FPU&#xff09; 3、三角函数单元 &#xff08;TMU&#xff09; 4、1MB 的 FLASH &#xff08;ECC保护&#xff09; 5、1MB 的 SRAM &#xff08;ECC保护&…

全网最全,Selenium自动化测试POM模式总结(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在UI自动化测试中…

Python+Selenium+Unittest 之selenium7--元素定位6-CSS定位1(定位所有、定位class、定位id、tag定位)

目录 一、CSS简介 二、 定位方式 三、实践操作 1、*&#xff08;定位所有元素&#xff09; 2、. &#xff08;定位class属性&#xff09; 3、#&#xff08;定位id属性&#xff09; 4、tag定位 一、CSS简介 CSS属于是一种计算机语言&#xff0c;主要是用来为结构化文档的外…

软件测试期末速成(背题家出列!)

文章目录 一、前言二、选择题&#xff08;15 X 2&#xff09;1、概述2、相关概念3、黑盒测试4、白盒测试5、单元测试6、集成测试7、系统测试8、自动化测试9、实用软件测试技术 三、判断题&#xff08;10 X 1’&#xff09;四、简答题&#xff08;4 X 5&#xff09;1、软件测试生…

一文学会Nginx做图片服务器

Nginx做图片服务器 前言&#xff1a; Nginx是一个高性能的HTTP和反向代理web服务器,以及负载均衡器。根据nginx是高性能的http服务器&#xff0c;因此可以用作图片服务器使用。 本案例是在docker安装nginx来操作的。 什么是Nginx? Nginx是一款高性能的Web服务器和反向代理服…

linux入门之浅谈shell及权限的概念

文章目录 目录 文章目录 一、shell命令以及运行原理 二、linux权限的概念 1.Linux权限管理 a.文件访问者的分类&#xff08;人&#xff09; b.文件类型和访问权限 1&#xff09;文件类型 2&#xff09;基本权限 3&#xff09;文件权限值的表示方法 4)文件访问权限的相…

docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

Oracle 19c测试环境快速搭建 安装 # 下载镜像 19.3.0.0.0 docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c # 创建文件 mkdir -p /mymount/oracle19c/oradata # 授权&#xff0c;不授权会导致后面安装失败 chmod 777 /mymount/oracle19c/oradatadocker run …

01背包思路解析+代码

01背包 题目链接&#xff1a;01背包 思路&#xff1a;题目要求是获取背包能装的最大重量。一个物品有体积和重量两个属性。而当我们判断一个物品是否要放进背包&#xff0c;第一取决于他的体积是否足以放进背包&#xff0c;第二取决于他的重量是否足以让我们取出已经放入的一部…

buuctf 你有没有好好看网课? 解析

打开文件得到两个压缩包&#xff0c;第一个压缩包flag2需要密码&#xff0c;第二个压缩包flag3打开后在备注可以获得提示 使用arc爆破&#xff0c;得到6位数字密码 解压压缩包得到一个视频和文档 文档内容包含6个数字&#xff0c;结合视频猜测是关键信息藏在这两个时间节点上 …

XSS注入——DOM型XSS

DOM型xss XSS根据恶意脚本的传递方式可以分为3种&#xff0c;分别为反射型、存储型、DOM型&#xff0c;前面两种恶意脚本都会经过服务器端然后返回给客户端&#xff0c;相对DOM型来说比较好检测与防御&#xff0c;而DOM型不用将恶意脚本传输到服务器在返回客户端&#xff0c;这…

如何优化Nginx服务进程(详细教程)

目录 一、了解Nginx服务配置内容 ① 外框架 ② 内框架 ③ 三个主模块 二、Nginx服务进程 访问信息的组成 Web服务的监听配置 LNMP架构 三、Nginx优化 隐藏版本号 可以查询指定地址的服务信息 更改配置文件内容 检查语法错误 重启服务 再次查看版本号是否隐藏 自…

【qiankun】前端微服务踩坑记录-长期更新

目录 前言 1.Cannot GET /cooperation/board 场景&#xff1a; 分析 解决 2.Invalid options in vue.config.js:"css.requireModuleExtension" is not allowed 原因 解决 3.less版本升级导致除法写法未转换 原因 解决 4.主子应用样式隔离 场景 解决 5…