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

.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日

相关文章

  • 操作系统常见面试题

    操作系统常见面试题攻略 简介 操作系统(Operating System)是计算机系统的核心部分,是承载用户程序运行的最基础的软件。在求职面试中,大部分技术岗位都会考察操作系统的相关知识。本文将对常见的操作系统面试题进行详细讲解,提供专业的攻略。 知识点 常见的操作系统面试题涉及以下知识点: 进程与线程 进程之间的通信 线程之间的同步与互斥 进程调度算法 虚…

    其他 2023年4月16日
    00
  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法 在 ASP.NET 网页设计中,Table 表格控件经常用于布局和显示数据。本文将详细讲解Table 表格控件的使用方法。 一、基本语法 Table 表格控件的基本语法如下: <asp:Table runat="server"> <!– Table 表格内容 –>…

    other 2023年6月27日
    00
  • jQuery检测鼠标左键和右键点击的方法

    采用jQuery检测鼠标左键和右键点击的方法可以用来实现在用户对不同鼠标按钮的操作做出不同反应的效果。下面是完整的攻略。 检测鼠标左键和右键点击的方法 要检测用户在网页上单击了鼠标左键或右键,我们可以使用jQuery的mousedown事件和which属性。which属性可以告诉我们用户单击了哪个鼠标键。通常,1表示鼠标左键,2表示鼠标中键,3表示鼠标右键。…

    other 2023年6月27日
    00
  • myeclipse配置maven

    当然,我可以为您提供有关“myeclipse配置maven”的完整攻略,以下是详细说明: MyEclipse配置Maven MyEclipse是一款基于Eclipse的Java开发工具,支持Maven的开发。在使用MyEclipse开发Maven项目时,需要先配置Maven。以下是具体步骤: 步骤1:下载和安装Maven 首先,需要从Maven网站下载Mav…

    other 2023年5月7日
    00
  • 网站访问慢的排查方法及解决方案

    网站访问慢的排查方法及解决方案 排查方法 1. 确定问题范围 首先需要明确问题的具体表现,例如是整个网站慢还是只有某个页面慢,是移动端还是PC端访问慢等等。通过定位问题的具体表现,可以明确排查范围,缩小问题的影响范围从而更加高效地排查问题。 2. 基础排查 基础排查包括检查网站服务器、网络连接、DNS解析等基本内容,以下是一些基础排查的方法: 通过ping命…

    other 2023年6月26日
    00
  • Win8.1游戏时TP提示自加载初始化失败无法继续LOL、CF等游戏

    该问题的原因是由于Windows 8.1系统版本中的TP(又称“透明页框架”)对于某些游戏不兼容导致的,需要进行如下操作: 步骤1:禁用TP(透明页框架) 打开命令提示符,以管理员身份运行 输入以下命令:bcdedit /set {current} nx AlwaysOff 重启计算机 步骤2:删除TP驱动程序 按Win+X打开“电源用户命令”,选择“设备管…

    other 2023年6月20日
    00
  • win10下oracle 11g安装图文教程

    Win10下Oracle 11g安装图文教程 前言 Oracle 11g是一款十分流行的数据库管理系统,但是其在Win10系统下的安装却是一件比较困难的事情。在本教程中,我们将为大家提供一个详尽的安装攻略,帮助大家顺利安装Oracle 11g。 步骤一:下载Oracle 11g 首先,我们需要在Oracle官网上下载Oracle 11g的安装包。在下载过程中…

    other 2023年6月27日
    00
  • k8s service nodePort无法访问的问题解决

    针对“k8s service nodePort无法访问的问题解决”这一问题,以下是一份完整的攻略: 问题分析 Kubernetes中的Service可以将一组Pod封装成一个虚拟的Service,并赋予一个唯一的ClusterIP。但是,有时候当我们使用Service中定义了一个nodePort时,可能会出现无法访问的问题。这可能与以下几个因素有关: 节点的…

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