我对Java中的设计模式有疑问。
我有一个名为 Bottle 的类。 现在,我有两种瓶子:玻璃瓶和金属瓶。
我应使用以下哪些设计模式: 1.将瓶子的类型设置为其属性
Quantity
Year Week Client
2012 1 Coke 200
Pepsi 100
7UP 400
2 Coke 500
Pepsi 750
7UP 200
3 Coke 120
Pepsi 100
7UP 050
... ... ... ...
2020 22 Coke 100
Mountain Dew 650
Fanta 110
23 7UP 100
Pepsi 199
Coke 200
... ... ... ...
class Bottle {
public enum BottleType { GLASS, METAL }
BottleType type;
}
更新我的问题 瓶子将由名为BottleProcessor的处理器处理
abstract class Bottle {
}
class GlassBottle extends Bottle {
}
class MetalBotle extends Bottle {
}
答案 0 :(得分:0)
尽管没有进一步的计划很难回答,但是第二种选择通常更好。但是,我们称它为多态而不是继承,因为不仅可以使用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
类表示违反单一责任原则,因为它处理多种瓶子。因此,如果您的应用由于某种特殊的瓶子而有所变化,则整个代码都会受到影响。在许多情况下,这可能会令人沮丧。