这样使用Inheritance对吗?
Using Inheritance like this is right?
我是 Java 中学习继承的学生。
我正在制作一个程序(比特币挖矿游戏)。在程序中,有不同种类的挖掘机(矿机):
普通挖矿机(这个只挖币),
overclock digger(这个可以挖而且可以超频挖得更快)和
durability recover digger(这个可以挖,超频,恢复耐久(每个digger都有耐久,挖的时候耐久掉)
我做了这个class图(有些属性和方法我没有在图片中描述。我认为我的问题不需要这些。):
我不确定我做的对不对,尤其是使用 if 继承。
不使用继承,我应该像这样创建一个 class 吗?因为只有一个函数添加到 classes:
这可能是装饰器模式的一个很好的候选者,它允许您在 运行 时间将自定义功能应用于单个对象。可以在 Decorator Pattern 维基百科页面上找到一个很好的参考,其中包括一个窗口系统的详细示例,以及一个 UML class 图供参考。一段代码展示了装饰器和具体的装饰器:
// abstract decorator class - note that it implements Window
abstract class WindowDecorator implements Window {
private final Window windowToBeDecorated; // the Window being decorated
public WindowDecorator (Window windowToBeDecorated) {
this.windowToBeDecorated = windowToBeDecorated;
}
@Override
public void draw() {
windowToBeDecorated.draw(); //Delegation
}
@Override
public String getDescription() {
return windowToBeDecorated.getDescription(); //Delegation
}
}
// The first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator extends WindowDecorator {
public VerticalScrollBarDecorator (Window windowToBeDecorated) {
super(windowToBeDecorated);
}
@Override
public void draw() {
super.draw();
drawVerticalScrollBar();
}
private void drawVerticalScrollBar() {
// Draw the vertical scrollbar
}
@Override
public String getDescription() {
return super.getDescription() + ", including vertical scrollbars";
}
}
在您的情况下,装饰器将被称为 DiggerDecorator
,具体装饰器可以被称为 OverclockDecorator
和 RecoverDurabilityDecorator
.
实例化完全装饰对象的代码可能如下所示:
Digger decoratedDigger = new OverclockDecorator(new RecoverDurabilityDecorator(new SimpleDigger()));
如您所见,此解决方案仍然使用继承,但个别功能可以根据需要"mixed in"。
我是 Java 中学习继承的学生。
我正在制作一个程序(比特币挖矿游戏)。在程序中,有不同种类的挖掘机(矿机):
普通挖矿机(这个只挖币),
overclock digger(这个可以挖而且可以超频挖得更快)和
durability recover digger(这个可以挖,超频,恢复耐久(每个digger都有耐久,挖的时候耐久掉)
我做了这个class图(有些属性和方法我没有在图片中描述。我认为我的问题不需要这些。):
我不确定我做的对不对,尤其是使用 if 继承。
不使用继承,我应该像这样创建一个 class 吗?因为只有一个函数添加到 classes:
这可能是装饰器模式的一个很好的候选者,它允许您在 运行 时间将自定义功能应用于单个对象。可以在 Decorator Pattern 维基百科页面上找到一个很好的参考,其中包括一个窗口系统的详细示例,以及一个 UML class 图供参考。一段代码展示了装饰器和具体的装饰器:
// abstract decorator class - note that it implements Window
abstract class WindowDecorator implements Window {
private final Window windowToBeDecorated; // the Window being decorated
public WindowDecorator (Window windowToBeDecorated) {
this.windowToBeDecorated = windowToBeDecorated;
}
@Override
public void draw() {
windowToBeDecorated.draw(); //Delegation
}
@Override
public String getDescription() {
return windowToBeDecorated.getDescription(); //Delegation
}
}
// The first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator extends WindowDecorator {
public VerticalScrollBarDecorator (Window windowToBeDecorated) {
super(windowToBeDecorated);
}
@Override
public void draw() {
super.draw();
drawVerticalScrollBar();
}
private void drawVerticalScrollBar() {
// Draw the vertical scrollbar
}
@Override
public String getDescription() {
return super.getDescription() + ", including vertical scrollbars";
}
}
在您的情况下,装饰器将被称为 DiggerDecorator
,具体装饰器可以被称为 OverclockDecorator
和 RecoverDurabilityDecorator
.
实例化完全装饰对象的代码可能如下所示:
Digger decoratedDigger = new OverclockDecorator(new RecoverDurabilityDecorator(new SimpleDigger()));
如您所见,此解决方案仍然使用继承,但个别功能可以根据需要"mixed in"。