Существует базовый класс под названием «Действие» со следующими наследниками:SimpleAction1, SimpleAction2 , BaseComplexAction.
BaseComplexAction наследуется от ComplexAction1, ComplexAction2
Затем есть универсальный интерфейс под названием «Техника», чей общий тип может быть любым классом в иерархии «Действие».
«Техника» определяет два метода:
getActions (), который возвращает конкретный подтип «Действия», и matchAction(), который возвращает логическое значение.
matchesAction() должен сообщать, могло ли определенное действие быть сгенерировано конкретной реализацией «Техники».
Для справки я добавлю несколько примеров реализации приведенных выше классов на Java:
Код: Выделить всё
interface Technique {
T getActions();
boolean matchesAction(T action);
}
// Concrete Technique implementation
class MyTechnique implements Technique {
@Override
public BaseComplexAction getActions() {
// Logic to determine and return a specific ComplexAction
return new ComplexAction1();
}
@Override
public boolean matchesAction(BaseComplexAction action) {
// Logic to check if the action matches the technique's criteria
return action instanceof ComplexAction1;
}
}
При такой структуре у меня возникают проблемы:
- Если кто-то хочет использовать метод match() для общего действия, необходимо сначала привести действие к правильному типу, поддерживаемому конкретным типом метода.
- Вместо этого, если я удалю общий тип из определения Technique, конкретная техника должна будет проверить тип класса предоставленного общего действия, а затем привести его к конкретному подтипу, чтобы выполнить проверку.
Я буду рад предоставить более подробную информацию, если это необходимо.
Подробнее здесь: https://stackoverflow.com/questions/792 ... rking-with
Мобильная версия