Стоит ли использовать instanceof, если в JTree несколько разных объектов?

В моем JTree дереве существует несколько разных видов объектов (6 штук).
Для работы разных объектов нужны совершенно разные методы.
У каждого класса около десятка своих полей.
<code lang="java">
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getModel().getChild(currentNode, i);
    Object ob = node.getUserObject();
    if(ob instanceof DescriptionTemplate) {
        // todo...
    }
</code>

Насколько оправдано использование использование оператора instanceof в этом случае?
При использовании instanceof образуется большое количество ветвлений.

Можно ли решить эту проблему другим способом?
  • Вопрос задан
  • 2839 просмотров
Пригласить эксперта
Ответы на вопрос 2
Losted
@Losted
Software Architect
Как насчет общего интерфейса с методом getType()?
Ответ написан
@paralainer
Не стоит забывать про возможность использования стратегий.

Очень приблизительный код, но суть ясна:
private static final Map<Class, Action> strategies = new HashMap<>();
    
    private static interface Action {
         void doAction(Params params);
    }
    
    static {
        strategies.put(ANodeType.class, new Action() {
            public void doAction(Params params){
                 ...
            } 
        });

        strategies.put(BNodeType.class, new Action() {
            public void doAction(Params params){
                 ...
            } 
        });
    }
    
    ...
    
    public void handleTreeNode(Object node, Params params){
       strategies.get(node.getClass()).doAction(params);
    }


А вообще есть вариант реализовать всеми типами нод интерфейс Action (переименовав его, например, в JTreeNode) и выглядеть это будет примерно так:

public void handleTreeNode(JTreeNode node, Params params){
       node.doAction(params);
    }


Но тут нужно смотреть возможно ли изменить код классов, которые хранятся в дереве и насколько это будет архитектурно правильно. (Специальные ли это объекты для дерева или общие объекты системы)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы