.Net创建型设计模式之建造者、生成器模式(Builder)

yizhihongxing

.Net创建型设计模式之建造者、生成器模式(Builder)

生成器模式(Builder)是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离。通过使用生成器模式,可以逐步构建一个复杂对象,而不需要直接调用其构造函数或公共接口。

优点

  • 将对象的构建过程与其表示分离,使得构建过程更加灵活和可控。
  • 可以通过不同的生成器组合来构建不同的对象,提高代码的复用性和可扩展性。
  • 隐藏了对象的构建细节,使得客户端代码更加简洁和易于理解。

结构

生成器模式包含以下几个关键角色:

  • 产品(Product):表示被构建的复杂对象。
  • 抽象生成器(Abstract Builder):定义了构建产品的抽象接口,包括构建各个部分的方法。
  • 具体生成器(Concrete Builder):实现了抽象生成器接口,负责构建产品的各个部分,并提供获取最终产品的方法。
  • 指导者(Director):负责使用生成器来构建产品,它并不知道具体的构建细节,只负责调用生成器的方法来构建产品。

示例说明1:构建汽车对象

// 产品类:汽车
public class Car
{
    public string Brand { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
    public string Color { get; set; }
    // 其他属性和方法...
}

// 抽象生成器类
public abstract class CarBuilder
{
    protected Car car;

    public void CreateCar()
    {
        car = new Car();
    }

    public abstract void SetBrand();
    public abstract void SetModel();
    public abstract void SetYear();
    public abstract void SetColor();

    public Car GetCar()
    {
        return car;
    }
}

// 具体生成器类:奔驰汽车生成器
public class BenzCarBuilder : CarBuilder
{
    public override void SetBrand()
    {
        car.Brand = \"Benz\";
    }

    public override void SetModel()
    {
        car.Model = \"C-Class\";
    }

    public override void SetYear()
    {
        car.Year = 2022;
    }

    public override void SetColor()
    {
        car.Color = \"Black\";
    }
}

// 指导者类
public class CarDirector
{
    private CarBuilder carBuilder;

    public CarDirector(CarBuilder builder)
    {
        carBuilder = builder;
    }

    public void ConstructCar()
    {
        carBuilder.CreateCar();
        carBuilder.SetBrand();
        carBuilder.SetModel();
        carBuilder.SetYear();
        carBuilder.SetColor();
    }
}

// 客户端代码
CarBuilder builder = new BenzCarBuilder();
CarDirector director = new CarDirector(builder);
director.ConstructCar();
Car car = builder.GetCar();

在上述示例中,我们通过生成器模式逐步构建了一个汽车对象。抽象生成器定义了构建汽车的抽象接口,具体生成器实现了抽象生成器接口,并负责构建具体的汽车对象。指导者类使用生成器来构建汽车对象,客户端代码通过指导者来获取最终构建好的汽车对象。

示例说明2:构建电脑对象

```csharp
// 产品类:电脑
public class Computer
{
public string Brand { get; set; }
public string Model { get; set; }
public string CPU { get; set; }
public int RAM { get; set; }
// 其他属性和方法...
}

// 抽象生成器类
public abstract class ComputerBuilder
{
protected Computer computer;

public void CreateComputer()
{
    computer = new Computer();
}

public abstract void SetBrand();
public abstract void SetModel();
public abstract void SetCPU();
public abstract void SetRAM();

public Computer GetComputer()
{
    return computer;
}

}

// 具体生成器类:戴尔电脑

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net创建型设计模式之建造者、生成器模式(Builder) - Python技术站

(0)
上一篇 2023年10月15日
下一篇 2023年10月15日

相关文章

  • 易语言声明变量的步骤讲解

    易语言声明变量的步骤讲解 在易语言中,声明变量是为了给一个数据项分配内存空间,并为其指定一个名称。变量可以存储不同类型的数据,如整数、浮点数、字符串等。下面是易语言声明变量的步骤讲解: 步骤一:选择变量类型 首先,你需要选择适合你的数据的变量类型。易语言提供了多种变量类型,包括整数、浮点数、字符串、布尔值等。根据你的需求,选择合适的变量类型。 以下是一些常见…

    other 2023年8月8日
    00
  • ntrun怎么使用?nTrun快速启动工具使用技巧分享

    ntrun怎么使用? 1. ntrun是什么? ntrun是一款快速启动工具,可以帮助用户快速启动Windows系统中的各种程序和命令。使用ntrun可以提高用户的工作效率,特别是经常需要使用命令行工具的用户。 2. 如何使用ntrun? 2.1 下载并安装ntrun ntrun可以在官方网站上下载。下载完成后,按照提示进行安装即可。 2.2 启动ntrun…

    other 2023年6月27日
    00
  • Android动态加载布局实现技巧介绍

    Android动态加载布局实现技巧介绍 在Android开发中,动态加载布局是一种非常有用的技巧,它允许我们在运行时根据需要动态地加载和显示布局。这种技术可以帮助我们实现更灵活和可扩展的界面设计。本攻略将详细介绍如何在Android应用中实现动态加载布局,并提供两个示例说明。 1. 使用LayoutInflater动态加载布局 LayoutInflater是…

    other 2023年8月20日
    00
  • linux中用于curl/curl.h的c/c++

    Linux中使用curl/curl.h的C/C++攻略 curl是一个用于传输数据的工具和库,它支持多种协议,包括HTTP、FTP、SMTP等。curl.h是curl库的头文件,它包含了curl库的函数和数据结构的声明。在Linux中,可以使用curl/curl.h编写C/C++程序,实现网络传输功能。以下是使用curl/curl.h的C/C++的完整攻略,…

    other 2023年5月9日
    00
  • 魔兽世界6.0法师天赋 魔兽6.0法师PVE输出攻略

    魔兽世界6.0法师天赋&输出攻略 法师天赋选择 在6.0版本中,法师的天赋选择主要分为火焰、冰霜和奥术三个树。根据不同的玩家游戏习惯,可以选择以下的天赋: 火焰天赋 火焰天赋适合喜欢火焰法术的玩家或者输出为主的玩家。其中,必备天赋点为[爆发强化]和[炽热连击]。[爆发强化]可以增加主要爆发技能的伤害,[炽热连击]可以增加火焰法术的连击几率,提升输出。…

    other 2023年6月27日
    00
  • Vue项目打包并部署nginx服务器的详细步骤

    下面是Vue项目打包并部署nginx服务器的详细步骤: 1. 打包Vue项目 首先,我们需要使用Vue提供的打包工具将项目打包成静态文件。进入Vue项目所在文件夹,执行以下命令: npm run build 这个命令会在项目根目录下生成一个 dist 文件夹,里面包含了所有的静态文件。 2. 安装nginx 在部署前,首先要确保服务器上已经安装了nginx …

    other 2023年6月27日
    00
  • R语言批量读取某路径下文件内容的方法

    读取某路径下的多个文件内容是数据分析中经常需要处理的问题,R语言提供了多种方式来实现这个目标,以下是一种标准的方法: 1. 获取文件列表 首先,我们需要获取某个路径下的所有文件名,可以使用 list.files() 函数来实现: dir_path <- "C:/my_folder" files <- list.files(di…

    other 2023年6月27日
    00
  • postgresql 实现字符串分割字段转列表查询

    首先,在 PostgreSQL 中实现字符串分割字段转列表查询,需要用到内置函数 string_to_array() 和 unnest()。 string_to_array() 函数可以将一个字符串按照指定的分隔符分隔成一个数组,其语法如下: string_to_array(string text, delimiter text) RETURNS text[…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部