У меня есть вопрос, связанный с ООП. У меня есть интерфейс, скажем:
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;
Каков наилучший способ решить эту проблему? Я не могу найти решение, которое не включает много дубликатов кода.
Обратите внимание, что, хотя приведенный выше пример довольно маленький и простой, интерфейс и декоратор довольно большие и сложные.
Большое спасибо всем.