oop – OO – 继承与装饰问题

我有一个与OOP相关的问题.我有一个界面,说:

class MyInterface {
    public int getValue();
}

在我的项目中,此接口由7个实现实现:

class MyImplementation1 implements MyInterface { ... }
...
class MyImplementation7 implements MyInterface { ... }

这些实现由几个不同的模块使用.对于某些模块,必须稍微调整MyInterface的行为.我们必须返回实现器1的值(为了示例).我通过创建一个小装饰器来解决这个问题:

class MyDifferentInterface implements MyInterface {
   private MyInterface i;

   public MyDifferentInterface(MyInterface i) {
       this.i = i;
   }

   public int getValue() {
       return i.getValue() + 1;
   }
}

这样做了.

这是我的问题:其中一个模块不接受MyInterface参数,而是直接接受MyImplementation4.原因是此模块需要MyImplementation4的特定行为,MyInterface接口本身并未涵盖这些行为.但是,这就困难了,这个模块也必须适用于MyImplementation4的修改版本.也就是说,getValue()必须返回1;

解决这个问题的最佳方法是什么?我没有提出一个不包含大量代码重复的解决方案.

请注意,尽管上面的示例非常小而且简单,但界面和装饰器非常庞大且复杂.

非常感谢.

最佳答案 如果它是Java,你可以做到

class ModifiedMyImplementation4 extends MyImplementation4
{
    @Override
    public int getValue()
    {
        return super.getValue() + 1;
    }
}

没有代码重复!

点赞