工厂模式:枚举参数与显式方法名称?

jra*_*ali 2 enums factory-pattern

假设您有一个返回 ILightBulb 实例的工厂。实现工厂的两种方式(可能还有更多)如下:

选项 1 - 传入枚举类型

enum LightBulbType
{
    Incandescent,
    Halogen,
    Led,
}

class ILightBulbFactory
{
    public ILightBulb Create(LightBulbType type)
    {
        switch (type)
        {
            case LightBulbType.Incandescent:
                return new IncandescentBulb();
            case LightBulbType.Halogen:
                return new HalogenBulb();
            case LightBulbType.Led:
                return new LedBulb();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

选项 2 - 显式方法名称

class ILightBulbFactory
{
    public ILightBulb CreateIncandescent()
    {
        return new IncandescentBulb();
    }

    public ILightBulb CreateHalogen()
    {
        return new HalogenBulb();
    }

    public ILightBulb CreateLed()
    {
        return new LedBulb();
    }
}
Run Code Online (Sandbox Code Playgroud)

哪种方法最可取,为什么?

谢谢。

小智 5

在 java 中,您可以在枚举中解决它,从而确保如果您添加新的枚举,您的所有代码将继续工作,而不是忘记向您的案例添加语句。

enum LightBulbType
{
    Incandescent{

        @Override
        public ILightBulb getInstance() {
            return new IncandescentBulb();
        }

    },
    Halogen{

        @Override
        public ILightBulb getInstance() {
            return new HalogenBulb();
        }

    },
    Led{

        @Override
        public ILightBulb getInstance() {
            return new LedBulb();
        }

    };

    public abstract ILightBulb getInstance();
}

class ILightBulbFactory
{
    public ILightBulb Create(LightBulbType type)
    {
       return type.getInstance();
    }
}
Run Code Online (Sandbox Code Playgroud)