首页 > 其他分享 > 小谈设计模式(14)—建造者模式

小谈设计模式(14)—建造者模式

时间:2023-12-08 14:31:49浏览次数:23  
标签:builder 14 小谈 void 建造 构建 产品 设计模式 public

(小谈设计模式(14)—建造者模式)

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。

建造者模式

建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 在这里插入图片描述

角色分类

产品(Product)

表示被构建的复杂对象。通常包含多个部分,如属性、方法等。

抽象建造者(Builder)

定义了构建产品的抽象方法,通常包括构建各个部分的方法和返回产品的方法。

具体建造者(Concrete Builder)

实现了抽象建造者接口,负责具体的产品构建过程。通常包含一个具体产品的实例,通过构建各个部分最终返回该产品实例。

指挥者(Director)

负责调用具体建造者来构建产品,它不知道具体的构建细节,只负责调用构建方法和返回产品。

在这里插入图片描述

核心思想

将构建复杂对象的过程分解为多个简单的步骤,通过不同的具体建造者来实现这些步骤,最终由指挥者来调用具体建造者的方法来构建产品。这样可以使得构建过程更加灵活,可以根据需要选择不同的具体建造者来构建不同的产品。 在这里插入图片描述

Java程序

// 产品类
class Product {
    private String part1;
    private String part2;
    
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    
    public void setPart2(String part2) {
        this.part2 = part2;
    }
    
    public void show() {
        System.out.println("Part 1: " + part1);
        System.out.println("Part 2: " + part2);
    }
}

// 抽象建造者
interface Builder {
    void buildPart1();
    void buildPart2();
    Product getResult();
}

// 具体建造者
class ConcreteBuilder implements Builder {
    private Product product;
    
    public ConcreteBuilder() {
        product = new Product();
    }
    
    public void buildPart1() {
        product.setPart1("Part 1");
    }
    
    public void buildPart2() {
        product.setPart2("Part 2");
    }
    
    public Product getResult() {
        return product;
    }
}

// 指挥者
class Director {
    private Builder builder;
    
    public Director(Builder builder) {
        this.builder = builder;
    }
    
    public void construct() {
        builder.buildPart1();
        builder.buildPart2();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.getResult();
        product.show();
    }
}

程序分析

在上述代码中,我们定义了一个产品类 Product,它有两个部分 part1 和 part2。然后我们定义了一个抽象建造者接口 Builder,其中包含了构建产品各个部分的方法,并定义了获取最终产品的方法。接着我们实现了具体建造者 ConcreteBuilder,它实现了建造者接口,并具体实现了构建各个部分的方法。然后我们定义了一个指挥者 Director,它负责控制建造过程,通过调用建造者的方法来构建产品。最后,在客户端中,我们创建了一个具体建造者对象,并将其传入指挥者中,然后通过指挥者来构建产品,并最终获取到构建好的产品并展示出来。

在这里插入图片描述

优缺点分析

优点

1

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

2

可以更加精细地控制对象的构建过程,灵活地添加、删除或修改构建步骤,从而创建不同的产品。

3

可以避免构造方法中出现过多的参数,提高代码的可读性和可维护性。

4

可以通过建造者来隐藏具体产品的实现细节,只暴露统一的构建接口,提高代码的封装性。 在这里插入图片描述

缺点

1

增加了代码的复杂性,需要定义多个类和接口来实现建造者模式。

2

如果产品的组成部分变化较少,或者只有一个具体建造者,建造者模式可能会显得过于繁琐。

总结分析

建造者模式适用于构建复杂对象的场景,通过将构建过程分解为多个步骤,使得构建过程更加灵活,并且可以复用相同的构建过程来创建不同的产品。然而,建造者模式也会增加代码的复杂性,需要权衡使用建造者模式带来的优势和缺点。

在这里插入图片描述

标签:builder,14,小谈,void,建造,构建,产品,设计模式,public
From: https://blog.51cto.com/u_16193391/8737811

相关文章

  • AMD 锐龙5 7500F VS. Intel 酷睿i5-14600K对比:整机价格相差2000 游戏性能基本持平
    一、前言:ITX主机是该选Intel还是AMD平台?时代在进步,随着机械硬盘逐渐淡出主流市场,再加上主板的集成度越来越高,ATX机箱早已不是刚需。相反,越来越多的人开支搭建自己喜欢的ITX平台,而一台高颜值的ITX主机放在书桌上,也是一道亮丽的风景线。当然,受限于散热能力,ITX主机需要合理的控制......
  • 20211314王艺达 实验四 2
    任务详情基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:Web服务器的客户端服务器,提交程序运行截图实现GET即可,请求,响应要符合HTTP协议规范服务器部署到华为云服务器,浏览器用本机的把服务器部署到试验箱。(加分项)具体实现代码:copy.c:/*copy.c:**Copyright......
  • 20211314王艺达 实验四 1
    1.time服务器的客户端服务器,提交程序运行截图查看ipcsapp.c:#include<netinet/in.h>#include<arpa/inet.h>#include<netdb.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<string.h>#include<errno.......
  • mumu模拟器frida-server-14.2.18-android执行报错{"type":"error","description":&
    前言全局说明环境:物理机Windos11mumu模拟器下载:MuMuInstaller_3.1.5.0_nochannel-mumu12_zh-Hans_1687258372mumu模拟器:MuMuNG-setup-V3.6.4.2333-1110175123.exemumu模拟器官网:https://mumu.163.commumu模拟器官网-历史版本:https://mumu.163.com/update/一、问题c......
  • GOF23--23种设计模式(二)
    一.建造者模式建造者模式也是属于建造型模式,它提供了一种创建对象的最佳方式定义:将一个复杂的对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示主要作用:在用户不知道对象的构建细节的情况下,就可以创建复杂的对象这里需要注意一下,建造者模式都都是用来创建复杂对......
  • 2023-2024-1 20231402《计算机基础与程序设计》第十一周学习总结
    2023-2024-120231402《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业这个作业的目标自学计算机科学概论第15,16章,《C语言程序设计》第10......
  • P5314 [Ynoi2011] ODT
    好题,牛牛的一个套路。先树剖一下,我们可以很简单的用树状数组维护每个点的真实值。对于每个点只维护所有轻儿子的信息,对于每次询问的时候暴力加入当前点,重儿子以及父亲的信息,查询第\(k\)大,再删除信息即可。考虑链修改的影响。因为只维护的是轻儿子的信息,那么只有链上的所有轻......
  • 23种设计模式——建造者模式
    今天我们要学习的是23种设计模式中的第四种——建造者模式。建造者模式主要适用于一些基本部件不会变,而其组合经常变化的情况,下面我们开始进入正题。概念:建造者模式(BuilderPattern)又叫生成器模式,是一种对象构建模式。建造者模式是将一个复杂对象的构造与它的表示分离,使同样的......
  • P8614 [蓝桥杯 2014 省 A] 波动数列
    这道题的精髓在于DP公式的推理#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>usingnamespacestd;constintN=1005,mod=100000007;intn,s,a,b;intdp[N*N];intmain(){cin>>n>>s......
  • uml设计模式语言
    UML(UnifiedModelingLanguage)是一种广泛应用于软件开发和系统设计的建模语言。在软件工程中,UML图用于可视化、规划和共享系统设计的概念,其中类图是其中最核心、最常用的一种图示。本文将简述UML模型设计的基本概念,重点关注类图及其关系的详细解释。1.UML概述:UML作为一种标准化......