C# 建造者模式(Builder Pattern)

建造者模式(Builder Pattern),也被称为生成器模式,是一种对象构建模式,旨在将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于构建具有多个组成部分的复杂对象,且这些组成部分的创建和组装方式相对独立。

public class BuilderPatternTest
{
    public void Main()
    {
        var director = new Director();//指挥者1
        var director1 = new Director1();//指挥者2
        var desktopBuilder = new DesktopBuilder();//建造者1
        var desktopBuilder2 = new DesktopBuilder2();//建造者2

        //第一台电脑,使用指挥者1,使用建造者1
        var computer1 = director.Construct(desktopBuilder);
        Console.WriteLine(computer1.ToString());

        //第二台电脑,使用指挥者2,使用建造者2
        var computer2 = director1.Construct(desktopBuilder);
        Console.WriteLine(computer2.ToString());

        //第三台电脑,使用指挥者1,使用建造者2
        var computer3 = director.Construct(desktopBuilder2);
        Console.WriteLine(computer3.ToString());

        //第四台电脑,使用建造者1,不使用指挥者
        var computer4 = new DesktopBuilder()
            .SetType("平板电脑")
            .SetRam(256)
            .SetProcessor("i13212")
            .Build();
        Console.WriteLine(computer4.ToString());
    }
}

// 定义产品类
public class Computer
{
    public string Type { get; }
    public bool IsGraphicsCardIncluded { get; }
    public int Ram { get; }
    public string Processor { get; }

    public Computer(string type, bool isGraphicsCardIncluded, int ram, string processor)
    {
        Type = type;
        IsGraphicsCardIncluded = isGraphicsCardIncluded;
        Ram = ram;
        Processor = processor;
    }

    public override string ToString()
    {
        return $"Type: {Type}, Graphics Card: {IsGraphicsCardIncluded}, RAM: {Ram}GB, Processor: {Processor}";
    }
}

// 抽象建造者
// 也可以使用接口实现抽象建造者
// 方法中返回自身,以便链式调用
public abstract class Builder
{
    protected string Type;
    protected bool IsGraphicsCardIncluded;
    protected int Ram;
    protected string Processor;

    public abstract Computer Build();

    public virtual Builder SetType(string type)
    {
        return this;
    }

    public virtual Builder SetGraphicsCard(bool isGraphicsCardIncluded)
    {
        return this;
    }

    public virtual Builder SetRam(int ram)
    {
        return this;
    }

    public virtual Builder SetProcessor(string processor)
    {
        return this;
    }
}

// 具体建造者
public class DesktopBuilder : Builder
{
    public override Computer Build()
    {
        return new Computer(Type, IsGraphicsCardIncluded, Ram, Processor);
    }

    public override DesktopBuilder SetType(string type)
    {
        Type = type;
        return this;
    }

    public override DesktopBuilder SetGraphicsCard(bool isGraphicsCardIncluded)
    {
        IsGraphicsCardIncluded = isGraphicsCardIncluded;
        return this;
    }

    public override DesktopBuilder SetRam(int ram)
    {
        Ram = ram;
        return this;
    }

    public override DesktopBuilder SetProcessor(string processor)
    {
        Processor = processor;
        return this;
    }
}

public class DesktopBuilder2 : Builder
{
    public override Computer Build()
    {
        return new Computer(Type, IsGraphicsCardIncluded, Ram, Processor);
    }

    public override DesktopBuilder2 SetType(string type)
    {
        Type = type;
        return this;
    }

    public override DesktopBuilder2 SetGraphicsCard(bool isGraphicsCardIncluded)
    {
        IsGraphicsCardIncluded = isGraphicsCardIncluded;
        return this;
    }

    public override DesktopBuilder2 SetRam(int ram)
    {
        Ram = ram;
        return this;
    }
}

// 导演类
public class Director
{
    public Computer Construct(Builder builder)
    {
        builder.SetType("台式电脑");
        builder.SetGraphicsCard(true);
        builder.SetRam(16);
        builder.SetProcessor("i7");
        return builder.Build();
    }
}

public class Director1
{
    public Computer Construct(Builder builder)
    {
        builder.SetType("笔记本电脑");
        builder.SetGraphicsCard(true);
        builder.SetRam(128);
        builder.SetProcessor("i1000");
        return builder.Build();
    }
}

相关推荐

  1. C++设计模式——建造模式(Builder)

    2024-07-12 18:36:04       69 阅读
  2. C#编程模式建造模式

    2024-07-12 18:36:04       37 阅读
  3. 建造模式(极简c++)》

    2024-07-12 18:36:04       44 阅读
  4. C# 建造模式(Builder Pattern)

    2024-07-12 18:36:04       23 阅读
  5. 建造模式(Builder)

    2024-07-12 18:36:04       55 阅读
  6. 建造模式

    2024-07-12 18:36:04       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 18:36:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 18:36:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 18:36:04       57 阅读
  4. Python语言-面向对象

    2024-07-12 18:36:04       68 阅读

热门阅读

  1. Warning: could not connect to a running Ollama instance

    2024-07-12 18:36:04       17 阅读
  2. 大语言模型

    2024-07-12 18:36:04       19 阅读
  3. EasyExcel文档链接与使用示例

    2024-07-12 18:36:04       17 阅读
  4. html转markdown nodejs实现

    2024-07-12 18:36:04       18 阅读
  5. 记一次nodeBB部署

    2024-07-12 18:36:04       23 阅读
  6. 使用Spring Boot实现分布式配置管理

    2024-07-12 18:36:04       16 阅读
  7. 快速上手文心一言:让创作更轻松

    2024-07-12 18:36:04       18 阅读
  8. 树状数组(Binary Indexed Tree, BIT)

    2024-07-12 18:36:04       19 阅读