工厂模式在.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 @ 2021-09-27 15:56  William202020  阅读(233)  评论(0)    收藏  举报