惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
腾讯CDC
J
Java Code Geeks
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
云风的 BLOG
云风的 BLOG
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
雷峰网
雷峰网
B
Blog RSS Feed
博客园_首页
量子位
F
Fortinet All Blogs
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog

牛牛技术客栈

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈
设计模式-建造者模式 - OXOXTECH 牛牛技术客栈
Jensen · 2024-01-23 · via 牛牛技术客栈

设计模式-建造者模式

Jensen Java Java, 设计模式

前言

Java开发中,设计模式是常用的一种编码方式,合理使用设计模式可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本期将撰写一个关于设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源至:Gitee点击跳转。在上一篇《Java设计模式(2)工厂模式》文章中,我们介绍了工厂模式。本文是这个系列的第三篇章,我们将讲解一下建造者模式的实现方式、应用场景以及它的用途。

建造者模式

建造者模式是一种创建型设计模式,其主要目的是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的对象

应用场景

  1. 当一个对象的构建过程较为复杂,包含多个组件或者步骤,而且需要根据不同的需求构建不同表示时
  2. 当需要创建一系列相似但具有不同配置的对象时

代码实现

创建建造者 Build 此类可构建电脑对象猫对象

/**
 * 建造者
 * @author Jensen
 * @date 2024-01-23
 * */
public class Build {
    public String cpu;
    public String memory;
    public String ssd;
    public String hdd;

    public String name;
    public Integer age;
    public String type;

    public Build setCpu(String cpu) {
        this.cpu = cpu;
        return this;
    }

    public Build setMemory(String memory) {
        this.memory = memory;
        return this;
    }

    public Build setSsd(String ssd) {
        this.ssd = ssd;
        return this;
    }

    public Build setHdd(String hdd) {
        this.hdd = hdd;
        return this;
    }

    public Build setName(String name) {
        this.name = name;
        return this;
    }

    public Build setAge(Integer age) {
        this.age = age;
        return this;
    }

    public Build setType(String type) {
        this.type = type;
        return this;
    }

    public Computer buildComputer(){
        return new Computer(this);
    }
    public Cat buildCat(){
        return new Cat(this);
    }
}

再创建相应的 Computer 类和 Cat

/**
 * 电脑实体
 * @author Jensen
 * @date 2024-01-23
 * */
public class Computer {
    private String cpu;
    private String memory;
    private String ssd;
    private String hdd;

    public Computer(Build build) {
        this.cpu = build.cpu;
        this.memory = build.memory;
        this.ssd = build.ssd;
        this.hdd = build.hdd;
    }

    @Override
    public String toString() {
        return "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", ssd='" + ssd + '\'' +
                ", hdd='" + hdd + '\'';
    }
}
/**
 * 猫实体
 * @author Jensen
 * @date 2024-01-23
 * */
public class Cat {
    private String name;
    private Integer age;
    private String type;

    public Cat(Build build){
        this.name = build.name;
        this.age = build.age;
        this.type = build.type;
    }

    @Override
    public String toString() {
        return "name='" + name + '\'' +
                ", age=" + age +
                ", type='" + type + '\'';
    }
}

使用示例

System.out.println("------------------------------建造者模式-----------------------------");
Computer computer = new Build()
                        .setCpu("AMD Ryzen 77800 X3D")
                        .setMemory("雷克沙战神之刃 16G")
                        .setHdd("雷克沙-战神NM7902TB PCIE4.0")
                        .setSsd("KIOXIA 256GB")
                        .buildComputer();
System.out.println("创建电脑对象:"+computer);
Cat cat = new Build()
              .setName("牛牛")
              .setAge(1)
              .setType("英短")
              .buildCat();
System.out.println("创建猫对象:"+cat);

输出:

202401231417086162.webp

结尾

我们经常用的 StringBuilder 类就是一个建造者模式的典型应用。它允许使用者逐步构建一个字符串,并最终返回构建好的字符串。在生产环境中,建造者模式的应用非常广泛,它具有灵活性、可扩展和可维护性,特别是在构建复杂的对象时。