说我有以下情况:
abstract class A {
abstract method1();
abstract method2();
}
class B extends A {
method1() {
// implementation 1
}
method2() {
// implementation 3
}
}
class C extends A {
method1() {
// implementation 1
}
method2() {
// implementation 4
}
}
class D extends A {
method1() {
// implementation 2
}
method2() {
// implementation 4
}
}
底线:同一个类的几个子类,为不同的方法使用不同的方法实现。
问题是我在不同的子类中有相同的实现。我的问题是如何处理这些常见的实现? 这样做的逻辑方法是创建另一个抽象级别,但只有当我有一个具有常见实现的方法时才能工作(因为Java没有多个继承)。我还可以将最常用的实现放在超类中,并且只在其他类中以不同方式实现它。但是,我不这样做,因为随着时间的推移,最常见的实现可能会随着其他类的添加而改变,此外,我希望将方法保持在超类中。
是否有一些模式能够以“优雅的方式”解决我的问题?
答案 0 :(得分:5)
你遇到了经典的OOP问题,继承的heirarchies变得笨拙: - )
我建议的解决方案:
答案 1 :(得分:2)
我会推荐Composition。请考虑以下事项:
interface I1 {
method1();
}
abstract class A implements I1{
abstract method1();
abstract method2();
}
class CommonOperations implements I1 {
method1() {
// implementation 1
}
}
class B extends A {
CommonOperations common;
method1() {
common.method1();
}
method2() {
// implementation 3
}
}
class C extends A {
CommonOperations common;
method1() {
common.method1();
}
method2() {
// implementation 4
}
}
class D extends A {
method1() {
// implementation 2
}
method2() {
// implementation 4
}
}