建造者模式在需要逐步构建复杂对象时非常有用,特别是当对象的构建步骤具有多个可选或必需属性时。

83 阅读2分钟

建造者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。以下是一个基于ASP.NET Core C#的简单但典型的建造者模式示例。

假设我们要构建一个 Person 类,它有几个可选的属性,如名字、年龄、地址和电话。

Step 1: 定义 Person

public class Person
{
    public string Name { get; set; }
    public int? Age { get; set; }
    public string Address { get; set; }
    public string Phone { get; set; }

    // Override ToString() for better representation
    public override string ToString()
    {
        return $"Name: {Name}, Age: {Age}, Address: {Address}, Phone: {Phone}";
    }
}

Step 2: 创建 PersonBuilder

public class PersonBuilder
{
    private Person _person = new Person();

    public PersonBuilder SetName(string name)
    {
        _person.Name = name;
        return this;
    }

    public PersonBuilder SetAge(int age)
    {
        _person.Age = age;
        return this;
    }

    public PersonBuilder SetAddress(string address)
    {
        _person.Address = address;
        return this;
    }

    public PersonBuilder SetPhone(string phone)
    {
        _person.Phone = phone;
        return this;
    }

    public Person Build()
    {
        return _person;
    }
}

Step 3: 使用建造者模式在ASP.NET Core控制器中创建一个 Person 对象

using Microsoft.AspNetCore.Mvc;

namespace BuilderPatternDemo.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PersonController : ControllerBase
    {
        [HttpGet("create")]
        public IActionResult CreatePerson()
        {
            // 使用建造者模式创建Person对象
            var person = new PersonBuilder()
                .SetName("John Doe")
                .SetAge(30)
                .SetAddress("123 Main St")
                .SetPhone("123-456-7890")
                .Build();

            return Ok(person);
        }
    }
}

Step 4: 配置ASP.NET Core项目

确保你的ASP.NET Core项目已经配置好,并且可以通过HTTP请求访问。你可以通过 dotnet run 命令启动项目,并通过浏览器或工具(如Postman)访问 http://localhost:5000/Person/create

运行结果

如果一切配置正确,访问上述URL后,你应该会看到类似如下的JSON响应:

{
    "name": "John Doe",
    "age": 30,
    "address": "123 Main St",
    "phone": "123-456-7890"
}

这个示例展示了如何使用建造者模式来构建一个复杂的 Person 对象,并将构建过程与对象的表示分离。这种模式在需要逐步构建复杂对象时非常有用,特别是当对象的构建步骤具有多个可选或必需属性时。