C# 工厂模式 个人基本流程

有个前提

本文并不会介绍工厂模式,只是记录在实际当中个人比较喜欢的工厂写法。仅仅作为备忘和参考。

开始流程

定义一个抽象类,包含一些公共的业务逻辑(也可以是接口)

复制代码
/// <summary>
/// 业务的基类,包含一些公共的业务逻辑
/// </summary>
abstract class BaseClass
{
    protected BaseClass() { }

    public virtual void Print()
    {
        throw new InvalidOperationException();
    }
}
复制代码

 然后定义一个具体业务

class ClassA:BaseClass
{
    public override void Print()
    {
        Console.WriteLine("233333333333");
    }
}

写一个枚举,包含很多业务分类

enum MyEnum
{
    // 主要编写一些具体的业务参数,传递这个就可以找到对应的业务
    A,
    B
}

 写一个工厂接口,包括枚举和创建返回

interface IFactoryHandler
{
    MyEnum TypEnum { get; }

    BaseClass Create();
}

写一个用到这个工厂接口的类,用于创建具体业务

class A : IFactoryHandler
{
    public MyEnum TypEnum { get; } = MyEnum.A;
    public BaseClass Create()
    {
        return new ClassA();
    }
}

最后利用反射方法,把枚举和具体业务一一对应

复制代码
public class Factory
{
    //反射到所有用到这个接口的类
    private Factory()
    {
        var type = typeof(IFactoryHandler);
        var instances = from t in Assembly.GetExecutingAssembly().GetTypes()
            where t.GetInterfaces().Contains(type)
            select Activator.CreateInstance(t) as IFactoryHandler;
        FactoryList = instances.ToArray();
    }

    private IFactoryHandler[] FactoryList { get; }

    public BaseClass Create(MyEnum type)
    {
        try
        {
            var factoryHandler = FactoryList.Single(x => x.TypEnum == type).Create();
            return factoryHandler;
        }
        catch (Exception e)
        {
            throw new InvalidOperationException("无效的操作,工厂和参数不匹配", e);
        }
    }
}
复制代码

白嫖链接

https://github.com/yinghualuowu/SakuraStuffPack/tree/master/SakuraStuffPack/SakuraStuffPack/Factory

 

posted @   樱花落舞  阅读(455)  评论(1编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示