工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到其子类。

124 阅读2分钟

当然!工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到其子类。以下是一个基于ASP.NET Core C#的简单但典型的工厂模式示例。

Step 1: 定义产品接口或抽象类

首先,我们定义一个产品接口或抽象类,这将是工厂方法所创建的对象的接口。在这个例子中,我们将创建一个简单的 Shape 接口。

public interface IShape
{
    void Draw();
}

Step 2: 实现具体产品类

接下来,我们实现 IShape 接口的具体产品类,比如 CircleRectangle

public class Circle : IShape
{
    public void Draw()
    {
        Console.WriteLine("Drawing Circle...");
    }
}

public class Rectangle : IShape
{
    public void Draw()
    {
        Console.WriteLine("Drawing Rectangle...");
    }
}

Step 3: 创建工厂类

然后,我们创建一个工厂类,它包含用于创建 IShape 对象的方法。在这个例子中,我们将创建一个 ShapeFactory 类。

public class ShapeFactory
{
    // 使用工厂方法创建对象
    public IShape CreateShape(string shapeType)
    {
        if (shapeType == null)
        {
            return null;
        }

        if (shapeType.ToLower() == "circle")
        {
            return new Circle();
        }
        else if (shapeType.ToLower() == "rectangle")
        {
            return new Rectangle();
        }

        throw new ArgumentException("Invalid shape type");
    }
}

Step 4: 使用工厂模式在ASP.NET Core控制器中创建对象

最后,我们在ASP.NET Core控制器中使用工厂模式来创建 IShape 对象。

using Microsoft.AspNetCore.Mvc;

namespace FactoryPatternDemo.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class ShapeController : ControllerBase
    {
        private readonly ShapeFactory _shapeFactory;

        public ShapeController()
        {
            _shapeFactory = new ShapeFactory();
        }

        [HttpGet("draw/{shapeType}")]
        public IActionResult DrawShape(string shapeType)
        {
            try
            {
                IShape shape = _shapeFactory.CreateShape(shapeType);
                shape.Draw();

                // 返回成功响应,这里可以返回更详细的信息或形状的具体数据
                return Ok("Shape drawn successfully");
            }
            catch (ArgumentException ex)
            {
                // 返回错误响应
                return BadRequest(new { Error = ex.Message });
            }
        }
    }
}

Step 5: 配置ASP.NET Core项目

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

运行结果

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

  • 对于 http://localhost:5000/Shape/draw/circle,响应将是 {"message":"Shape drawn successfully"},并且控制台将输出 Drawing Circle...
  • 对于 http://localhost:5000/Shape/draw/rectangle,响应将是 {"message":"Shape drawn successfully"},并且控制台将输出 Drawing Rectangle...

如果传递了无效的 shapeType,比如 http://localhost:5000/Shape/draw/triangle,你将得到一个400 Bad Request响应,并且响应体中将包含错误信息。

这个示例展示了如何使用工厂模式来创建不同类型的 IShape 对象,并将对象的创建逻辑封装在工厂类中。这有助于减少代码重复,并使代码更加灵活和可扩展。