【发布时间】:2016-03-15 09:02:36
【问题描述】:
我尝试了解 SOLID 原理,因此实现了一些 java sn-ps。我现在关心的是OCP。有以下样本,
public abstract class Bakery
{
public abstract Bakegood bake();
}
/******************************************/
public class BreadBakery extends Bakery {
@Override
public Bakegood bake() {
return new Bread();
}
}
/******************************************/
public class CakeBakery extends Bakery {
@Override
public Bakegood bake() {
return new Cake();
}
}
/******************************************/
我怎样才能创建合适的面包店。假设一位顾客来到面包店并说:“请给我两个蛋糕!”,那么我该如何实例化 CakeBakery。当然,我可以创建一个抽象工厂,例如:
public static Bakery createBakery(final String orderedBakegood)
{
switch(bakegood)
{
case "Cake": return new CakeBakery();
case "Bread": return new BreadBakery();
default: throw new InvalidBakeryException();
}
}
但我不想使用 switch 或 if 语句。是否还有其他可能,或者我的理解完全错误?
【问题讨论】:
-
switch 或 if 语句有什么问题?你需要以某种方式做出决定。
-
开关可以工作,但您需要将其打开以进行扩展。这意味着您应该能够覆盖它,因此该方法不应该是静态的。另一种解决方案是反射,它更灵活。我想看看其他人对此有什么看法,我也遇到过这个问题。
-
@Filkolev 考虑到他正在努力遵守良好的标准和模式,在这里使用反射就像是在打自己的脸,因为你想粉刷你的墙。
-
@Kayaman 我不能再反对了 :)
-
你们能否支持您的说法,即在这种特殊情况下反射是一种糟糕的编码实践?
标签: java solid-principles open-closed-principle