工厂模式在.NETCore项目中的应用

简单工厂模式大家都很熟悉,那么在.NETCore中如何优雅的去应用呢?
1、创建工厂接口

public interface IPhoneFactory
{
    /// <summary>
    /// 生产手机
    /// </summary>
    /// <param name="color"></param>
    /// <returns></returns>
    Phone Produce(string color);
}

2、实现工厂方法

public class PhoneFactory : IPhoneFactory
{
    private readonly PhoneOption _options;

    public PhoneFactory(IOptions<PhoneOption> options)
    {
        _options = options.Value;
    }

    public Phone Produce(string color)
    {
        Phone phone;
        switch (_options.PhoneType)
        {
            case EnumPhone.ApplePhone:
                phone = new ApplePhone(color);
                break;
            case EnumPhone.AndroidPhone:
                phone = new AndroidPhone(color);
                break;
            default:
                phone = new OtherPhone(color);
                break;
        }
        return phone;
    }
}

这里的PhoneOption对应配置文件里的内容,将来只需要修改配置文件参数,就可实现不同实例的切换。
3、配置依赖注入

public static class DependencyInjectionExtensions
{
    public static IServiceCollection AddCastData(this IServiceCollection service)
    {
        var Configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();

        // 注册服务
        service.AddHostedService<CastService>();
        service.Configure<PhoneOption>(Configuration.GetSection("Phone"));
        service.AddSingleton<IPhoneFactory, PhoneFactory>();
        return service;
    }
}

这里只需要关心service.AddSingleton<IPhoneFactory, PhoneFactory>() 接口是通过Singleton方式注入。
service.Configure(Configuration.GetSection("Phone")) 对应配置文件
4、应用

public class CastService : BackgroundService
{
    private readonly IPhoneFactory _phoneFactory;
    public CastService(IPhoneFactory phoneFactory)
    {
        _phoneFactory = phoneFactory;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        Phone phone = _phoneFactory.Produce("远锋蓝色");
        System.Console.WriteLine(phone);
    }
}

这就是简单工厂模式在.NetCore中的应用。

posted @   William202020  阅读(229)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示