我对Java中的设计模式有疑问。
我有一个名为Bottle的类。现在,我有两种Bottle:玻璃瓶和金属瓶。
我应使用以下哪些设计模式:1.将瓶子的类型设置为其属性
class Bottle {
public enum BottleType { GLASS, METAL }
BottleType type;
}
abstract class Bottle {
}
class GlassBottle extends Bottle {
}
class MetalBotle extends Bottle {
}
更新我的问题瓶子将由名为BottleProcessor的处理器处理]
class BottleProcessor {
public static breakBottle(Bottle _bottle) {
//TODO: break bottle
if _bottle is glass bottle
breakGlassBottle()
else if _bottle is metal bottle
breakMetalBottle()
}
}
尽管鉴于没有进一步的计划很难回答,但是第二种选择通常更好。但是,我们称它为多态而不是继承,因为您不仅可以通过extends
关键字,而且可以通过implements
关键字来获得此选项的好处。
这样的代码:
interface Bottle {
void doBreak();
}
class GlassBottle implements Bottle {
public void doBreak() { ... }
}
class MetalBottle implements Bottle {
public void doBreak() { ... }
}
class BottleProcessor {
public static breakBottle(Bottle _bottle) {
// here I don't know don't care about detailed things like Glass or Metal
// I just call:
_bottle.doBreak();
}
}
这种设计的好处是不会像第一个选项那样有大/神类。第一个选项中的Bottle
类表示违反单一责任原则,因为它处理多种瓶子。因此,如果您的应用由于某种特殊的瓶子而发生了一些变化,则整个代码都会受到影响。在许多情况下,这可能会令人沮丧。