我有一个抽象类Parent与抽象方法foo(),并bar()和其他非抽象方法和字段。我需要创建 4 个子类(以及以后更多)来涵盖foo()和的不同变体的每种组合bar():fooA(), fooB(), barA(), barB()。这些变体需要访问Parent. 换句话说,如果 Java 支持多重继承,那么我会有类似的东西:
abstract class Parent{
abstract foo(){}
abstract bar(){}
//other fields and methods that will be accessed foo and bar are PROTECTED
}
abstract class FooA extends Parent{
@Override
foo(){ ... }
}
abstract class FooB extends Parent{
@Override
foo(){ ... }
}
abstract class BarA extends Parent{
@Override
bar(){ ... }
}
abstract class BarB extends Parent{
@Override
bar(){ ... }
}
class ChildAA extends FooA, BarA{
}
class ChildAB extends FooA, BarB{
}
class ChildBA extends FooB, BarA{
}
class ChildBB extends FooB, BarB{
}
我找到了两种解决方案,每一种都有效,但差不多。有没有更好的方法来实现这种行为?我的解决方案如下:
1)第一个解决方案:
abstract class Parent {
foo(){
/* behaves like fooA */
}
//other fields and methods that will be accessed foo and bar are PROTECTED
}
class ChildAA extends Parent{
barA(){ ... }
}
class ChildAB extends Parent{
barB(){ ... }
}
class ChildBA extends ChildAA{
@Override
foo(){ /* behaves like fooB */ }
|
class ChildBB extends ChildAB{
@Override
foo(){ /* behaves like fooB */ }
}
这样做的问题是它重复了fooB()所有只fooB()需要的附加方法的代码。当需要更多变化时,问题会呈指数级恶化。
相关分类