jra*_*ali 2 enums factory-pattern
假设您有一个返回 ILightBulb 实例的工厂。实现工厂的两种方式(可能还有更多)如下:
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)
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)