为工厂方法模式返回 Void
Returning Void For A Factory Method Pattern
我目前正在完成 class 的作业,其中一个问题要我重构给我的一些示例代码。
不太精确,他们有一个抽象的 class 有几个不同的 subclass 并且每个不同的 subclass 都根据哪种 subclass 是。
例如
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());
...
然后它向控制台打印一个字符串,其中包含潜艇class和武器的名称。
在抽象的 superclass 它有一系列的 if 语句来检查它是什么 subclass 并为它分配正确的武器并打印正确的字符串。
他们建议查看设计模式,我选择了 'factory method',但是,由于它打印的字符串中包含子 class 的名称,因此我决定不 return 这个方法中的任何东西,只需通过这个语法分配武器:
this.weapon = //whatever weapon
和return无效。
这还算是工厂方法吗?我怀疑不是。
谢谢!
你是对的,这不是工厂方法。工厂方法主要创建 returns 一个 class 的新实例,可能会执行一些额外的初始化、日志记录或其他次要任务。
在您的示例中,不需要工厂,因为所有对象都有简单的构造函数。但是如果你真的想写一个工厂方法,它通常看起来像这样:
public static GuidedMissileSystem createGuidedMissileSystem() {
return new GuidedMissileSystem();
}
如您所见,这对简单的 classes 没有任何好处。如果您必须配置射程、弹药量和武器的许多其他细节,那将更有帮助。
看看你的代码,我建议你将特定于 subclasses 的行为移到它所属的地方——到 subclasses。例如,您可以将抽象方法 createWeapon()
添加到您的 superclass,并让 subclasses select 成为合适的武器。
我目前正在完成 class 的作业,其中一个问题要我重构给我的一些示例代码。
不太精确,他们有一个抽象的 class 有几个不同的 subclass 并且每个不同的 subclass 都根据哪种 subclass 是。
例如
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());
...
然后它向控制台打印一个字符串,其中包含潜艇class和武器的名称。
在抽象的 superclass 它有一系列的 if 语句来检查它是什么 subclass 并为它分配正确的武器并打印正确的字符串。
他们建议查看设计模式,我选择了 'factory method',但是,由于它打印的字符串中包含子 class 的名称,因此我决定不 return 这个方法中的任何东西,只需通过这个语法分配武器:
this.weapon = //whatever weapon
和return无效。
这还算是工厂方法吗?我怀疑不是。
谢谢!
你是对的,这不是工厂方法。工厂方法主要创建 returns 一个 class 的新实例,可能会执行一些额外的初始化、日志记录或其他次要任务。
在您的示例中,不需要工厂,因为所有对象都有简单的构造函数。但是如果你真的想写一个工厂方法,它通常看起来像这样:
public static GuidedMissileSystem createGuidedMissileSystem() {
return new GuidedMissileSystem();
}
如您所见,这对简单的 classes 没有任何好处。如果您必须配置射程、弹药量和武器的许多其他细节,那将更有帮助。
看看你的代码,我建议你将特定于 subclasses 的行为移到它所属的地方——到 subclasses。例如,您可以将抽象方法 createWeapon()
添加到您的 superclass,并让 subclasses select 成为合适的武器。