java - 多重继承,组合功能

标签 java oop design-patterns

我有一个名为 DE 的基本算法类.它有 2 个实现方法:a() , b() .我想测试这个算法的变体,命名为 DEa .所以,我正在做 DEa extends DE我重写方法 a() .还有另一种变体,算法 DEb .我也在做同样的事情,DEb extends DE并覆盖 b() .现在,我想测试算法 DEab .这就是问题所在。如果我写 DEab extends DEa它已经有重写的方法 a() , 但不是 b() , 我必须复制 b()来自 DEb ,这是丑陋的,更难维护。

代码示例:

class DE { int i; void a() { i = 1; } void b() { i++; } };
class DEa extends DE { void a() { i = 2; } };
class DEb extends DE { void b() { i--; } };
// class DEab extends DEa, DEb - can't write like this
class DEab extends DEa { void b() { i-- }; } // but this is copy-paste :c

我试过 interface A , interface B及以后 DE implements A, B , DEa extends DE , DEb extends DE ...这基本上是同一个问题:

interface A { void a(); } // methods in interfaces must be abstract
interface B { void b(); } 
class DE implements A, B { int i; void a() { i = 1; } void b() { i++; } };
class DEa extends DE { void a() { i = 2; } };
class DEb extends DE { void b() { i--; } }; 
class DEab extends // ... well it give me nothing

不用复制粘贴怎么办?

最佳答案

你可以使用这个模式。

public interface A {
    public void a();
}

public interface B {
    public void b();
}

public class ABComposition implements A, B {    
    private A a;
    private B b;

    public ABComposition(A a, B b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public void a() {
        a.a();      
    }

    @Override
    public void b() {
        b.b();
    }
}

关于java - 多重继承,组合功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17121538/

相关文章:

java - 通过反射计算方法调用传递的参数

python - 在 Python 中,是否可以调用类 A 的实例方法,但传入类 B 的实例?

c# - 使用 LINQ 和 C# 选择子集合的算法/模式

java - 使用适用于 Mac OS X 的 java Jar 文件创建应用程序包?

Eclipse 中的 Java Spring 检查

c++ - 使用自指针为类数据成员赋值时的区别

javascript - react 器模式在 Node.js 中是如何工作的?

database - 数据库 : To use identity column or not?

java - 如何获得 FacesException 的根本原因?

java - 如何更改消息框中字符串的颜色?