【发布时间】:2016-10-09 10:48:58
【问题描述】:
我目前正在完成一项课堂作业,其中一个问题要我重新构建给我的一些示例代码。
不太精确,它们有一个带有几个不同子类的抽象类,每个不同的子类根据它是哪种子类分配一个武器。
例如
if (this.getClass().getSimpleName().equals("FighterJet")) {
this.weapon = new GuidedMissileSystem();
System.out.println("FighterJet " + id + " equipped with " + weapon.getClass().getSimpleName());
}
else if (this.getClass().getSimpleName().equals("AttackHelicopter")) {
this.weapon = new GrenadeLauncher();
System.out.println("AttackHelicopter " + id + " equipped with " + weapon.getClass().getSimpleName());
...
然后它将一个字符串打印到控制台,其中包含子类和武器的名称。
在抽象超类中,它有一系列 if 语句来检查它是什么子类,并为其分配正确的武器并打印正确的字符串。
他们建议查看一种设计模式,我选择了“工厂方法”,但是,由于它正在打印一个包含子类名称的字符串,所以我决定在此方法中不返回任何内容,而只是分配通过这种语法武器:
this.weapon = //whatever weapon
并返回 void。
这仍然被认为是工厂方法吗?我怀疑不是。
谢谢!
【问题讨论】:
-
一般性说明:更喜欢
this instanceof FighterJet或getClass().equals(FighterJet.class)而不是字符串比较——它更精确,更简洁。
标签: java inheritance design-patterns factory-pattern