为工厂方法模式返回 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 成为合适的武器。