当前位置: 首页 > article >正文

23种设计模式之 【建造者模式】

文章目录

  • 一、概述
  • 二、关键点
  • 三、示例
    • 3.1 定义产品
    • 3.2 定义构建者接口
    • 3.3 实现具体构建者
    • 3.4 创建指挥者
    • 3.5 客户端代码
  • 四、解释
  • 五、优点
  • 六、缺点
  • 七、适用场景


一、概述

建造者模式(Builder Pattern)是一种创建型设计模式,它用于分离对象的构建和表示,使得同样的构建过程可以创建不同的表示。建造者模式通过将复杂对象的构建过程抽象出来,使得构建过程的步骤可以灵活地被替换或修改。

在这里插入图片描述

二、关键点

  1. 产品(Product):要创建的复杂对象。
  2. 构建者接口(Builder):定义创建产品各个部分的接口。
  3. 具体构建者(Concrete Builder):实现 Builder 接口,构建和装配各个部分。
  4. 指挥者(Director):负责按照特定的顺序或规则来调用构建者创建产品。
  5. 客户端(Client):使用指挥者和构建者来创建产品对象。

三、示例

假设我们要建造一个房子,房子包含地基、墙和屋顶。我们可以使用建造者模式来实现这个需求。

3.1 定义产品

public class House
{
    public string Foundation { get; set; }
    public string Walls { get; set; }
    public string Roof { get; set; }

    public void Show()
    {
        Console.WriteLine($"Foundation: {Foundation}");
        Console.WriteLine($"Walls: {Walls}");
        Console.WriteLine($"Roof: {Roof}");
    }
}

3.2 定义构建者接口

public interface IHouseBuilder
{
    void BuildFoundation();
    void BuildWalls();
    void BuildRoof();
    House GetResult();
}

3.3 实现具体构建者

public class ConcreteHouseBuilder : IHouseBuilder
{
    private House house = new House();

    public void BuildFoundation()
    {
        house.Foundation = "Concrete Foundation";
        Console.WriteLine("Building concrete foundation...");
    }

    public void BuildWalls()
    {
        house.Walls = "Brick Walls";
        Console.WriteLine("Building brick walls...");
    }

    public void BuildRoof()
    {
        house.Roof = "Shingle Roof";
        Console.WriteLine("Building shingle roof...");
    }

    public House GetResult()
    {
        return house;
    }
}

3.4 创建指挥者

public class Director
{
    private IHouseBuilder builder;

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

    public void Construct()
    {
        builder.BuildFoundation();
        builder.BuildWalls();
        builder.BuildRoof();
    }
}

3.5 客户端代码

class Program
{
    static void Main(string[] args)
    {
        IHouseBuilder builder = new ConcreteHouseBuilder();
        Director director = new Director(builder);

        director.Construct();
        House house = builder.GetResult();
        house.Show();
    }
}

四、解释

  1. 产品(House):表示要创建的复杂对象,包含多个部件。
  2. 构建者接口(IHouseBuilder):定义了创建产品各个部分的方法。
  3. 具体构建者(ConcreteHouseBuilder):实现了 IHouseBuilder 接口,提供了具体的构建过程。
  4. 指挥者(Director):负责调用具体构建者的方法来构建产品,按照特定的顺序调用。
  5. 客户端代码:创建具体构建者和指挥者,使用指挥者来构建产品,并获取最终的产品对象。

五、优点

  • 更好的控制和灵活性:可以逐步构建对象,并对构建过程有更精细的控制。
    易于扩展:可以创建新的具体构建者来构建不同的产品。
  • 封装复杂的创建逻辑:将产品的创建过程和复杂的创建逻辑封装在具体构建者中,使客户端代码更加简洁。

六、缺点

  • 更多的类和代码:引入了更多的类和代码,使得系统变得更复杂。
  • 构建过程固定:指挥者控制了构建过程的顺序,灵活性可能受到限制。

七、适用场景

  • 对象的创建过程复杂:需要通过多个步骤创建一个复杂对象。
  • 需要不同的表示:需要通过相同的创建过程构建不同的表示或变体。
  • 需要逐步构建对象:需要在构建对象的过程中逐步添加或修改部件。

http://www.kler.cn/a/577998.html

相关文章:

  • 理解梯度下降、链式法则、梯度消失/爆炸
  • 【Nest】文件下载——普通下载和流式下载
  • 从零开始训练小型语言模型之minimind
  • jQuery事件机制
  • 【橘子golang】从golang来谈闭包
  • Android WebSocket工具类:重连、心跳、消息队列一站式解决方案
  • 课题推荐——无人机在UWB环境下基于TOA/TDOA/AOA的室内定位与精度对比
  • ThinkPHP框架
  • 【够用就好008】开新坑自学esb32烧录进军物联网和嵌入式
  • PHP之常用函数
  • H5页面在移动端自动横屏
  • 开发环境搭建-03.后端环境搭建-使用Git进行版本控制
  • Leetcode 378-有序矩阵中第 K 小的元素
  • [从零开始学习JAVA ] 接口介绍
  • Unity UGUI下优化需要射线检测类的UI元素的一种方式
  • 【GPT入门】第9课 思维树概念与原理
  • 数据安全防线:备份文件的重要性与自动化实践
  • stm32——fft踩坑日记
  • ABB机器人Profinet或Ethernet/IP通讯的GSD/EDS文件获取方法
  • vue-cli3+vue2+elementUI+avue升级到vite+vue3+elementPlus+avue总结