【发布时间】:2019-01-10 08:12:58
【问题描述】:
大家好,
我有一个关于重构一段代码的问题。这些类的结构如下:
abstract class A
class A1 extends class A
class A2 extends class A
class A3 extends class A
abstract class AdditionalStuff {
abstract void function();
}
class AdditionalStuffForA1 extends AdditionalStuff
class AdditionalStuffForA2 extends AdditionalStuff
class AdditionalStuffForA3 extends AdditionalStuff
class Implementation {
List<A> aList;
.... //add A1, A2, A3 to aList
AdditionalStuff aS;
for (A instance: aList) {
if(instance instanceOf A1)
aS = new AdditionalStuffForA1();
else if(instance instanceOf A2)
aS = new AdditionalStuffForA2();
else
aS = new AdditionalStuffForA3();
aS.function()
}
}
我认为上面的代码是死板的,因为每次添加新的类An(例如A4和AdditionalStuffForA4)时,也必须修改if else语句。
我曾想过使用装饰器模式,但现在我认为装饰器模式无法解决我的问题。我想问一下,您能否建议我一种重构上述代码以消除使用 if-else 语句的方法? (请注意,我不能将 AdditionalStuff 的功能添加到 A 内部,因为它们的使用方式不同)
【问题讨论】:
-
AdditionalStuff抽象类是否持有状态? -
嗨,阿里斯,感谢您的评论。我是面向对象编程语言的新手。你能告诉我保持状态是什么意思吗?这是否意味着 AdditionalStuff 包含字段?
-
他的意思是:
AdditionalStuff有任何实例字段,还是只提供方法声明void function()(在这种情况下如果可以是接口)? -
@Thomas:是的,它还包含许多其他字段和其他具体功能。我只是简化它。
标签: java inheritance design-patterns refactoring