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

相关文章

  • Robot Framework(3)——RIDE工具详解

    Robot Framework(3)——RIDE工具详解 在前面的文章中,我们已经学习了Robot Framework的基础知识和使用方法。在实际的测试工作中,我们会遇到众多的测试用例需要编写和管理。这时候,一个好用的IDE工具可以帮助我们提高测试用例的编写效率和管理效率。今天我们要介绍的就是Robot Framework的一个非常流行的IDE工具——RID…

    其他 2023年3月28日
    00
  • bios密码忘记了怎么办?BIOS密码破解清除方法详解

    当忘记BIOS密码时,我们可以尝试以下方法进行破解和清除,具体操作步骤如下: 1. 使用开放式BIOS密码: 一些BIOS制造商将跨越许多主板的通用密码编码在BIOS中。 这些密码被充当开放式密码,并且是一个通用的备用选项。 常见的开放式密码包括“AMI”,“AAAMMMIII”,“AMI?SW”和“BIOS”。 示例一: 假设您正在使用AMI BIOS,则…

    other 2023年6月26日
    00
  • 微信小程序(五)页面生命周期详细介绍

    微信小程序(五)页面生命周期详细介绍 本文将会非常详细地介绍微信小程序页面的生命周期,包括生命周期函数的执行时机、作用和示例代码。 生命周期函数 微信小程序的页面周期函数主要由生命周期函数、响应事件函数和其他函数等组成。 生命周期函数 生命周期函数是指微信小程序页面在不同状态下执行的函数,它主要由以下五个函数构成: onLoad():页面加载时触发,只会触发…

    other 2023年6月27日
    00
  • 使用vue3+ts+setup获取全局变量getCurrentInstance的方法实例

    当使用Vue 3与TypeScript(TS)结合时,可以通过setup函数获取全局变量getCurrentInstance。getCurrentInstance是Vue 3中的一个函数,用于获取当前组件实例的引用。下面是使用Vue 3 + TS + setup函数获取getCurrentInstance的方法实例的完整攻略: 首先,确保你已经安装了Vue …

    other 2023年7月29日
    00
  • JS判断图片是否加载完成方法汇总(最新版)

    首先让我们了解一下为什么需要判断图片是否加载完成。 在网页开发中,如果想要实现一些需要图片支持的功能,如图片轮播、瀑布流布局、图片懒加载等,就需要在JS中判断图片是否加载完成。 那么如何判断图片是否加载完成呢?下面我将介绍一些常用的方式。 使用Image对象的onload事件 var img = new Image(); img.onload = funct…

    other 2023年6月25日
    00
  • PostgreSQL出现死锁该如何解决

    针对这个问题,我将提供如下的完整攻略来帮助你解决 PostgreSQL 出现死锁的问题。 什么是死锁 在讲解解决方案之前,我们先来了解一下什么是死锁。死锁是指在多个事务访问数据库时,由于彼此之间的资源请求互相依赖,最终导致所有事务都被挂起,无法继续执行,从而导致系统失效的一种现象。 当出现死锁时,必须解决它以使事务能够正常地继续执行。接下来我将给出两个示例来…

    other 2023年6月26日
    00
  • Android 拍照后返回缩略图的两种方法介绍

    当使用Android开发拍照功能时,可以通过两种方法获取拍照后的缩略图。下面将详细介绍这两种方法,并提供示例说明。 方法一:使用Camera API 首先,在AndroidManifest.xml文件中添加相机权限: <uses-permission android:name=\"android.permission.CAMERA\&quot…

    other 2023年9月7日
    00
  • 记一次Docker生产环境搭建的方法

    记一次Docker生产环境搭建的方法 什么是Docker? Docker是一个开源的应用程序容器引擎,可以轻松地在各种操作系统上创建、部署和运行应用程序。与传统的虚拟机不同,Docker容器不需要完整的操作系统,因此启动时间和资源消耗都很少。 Docker环境搭建 在一台服务器上搭建Docker生产环境,需要以下步骤: 安装Docker引擎 安装Docker…

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