шаблон создания для экземпляров в зависимости от нескольких экземпляров подкласса

1

У меня проблема, потому что я не смог определить подходящий шаблон дизайна.

Я хочу создавать экземпляры в зависимости от заданного типа, который был передан фабричному методу. То, что я делаю до сих пор, следующее:

T create(SuperType x) {
  if (x instanceof SubType1) {
    // do some stuff and return a new SubType extends T
  } else if (x instanceof SubType2) {
    // do some stuff and return a new SubType extends T
  } else if ...

  } else {
    throw new UnSupportedOperationException("nothing defined for " + x);
  }
}

Кажется, это не лучшая оценка для меня.

У кого-нибудь есть идея, как решить это лучше?

EDIT: класс, который я получаю, не создан сам по себе, это экземпляр http://wala.sourceforge.net/javadocs/trunk/com/ibm/wala/ssa/SSAInstruction.html, который имеет несколько подклассов, для которых я Я создаю новые экземпляры в зависимости от передаваемого типа.

  • 0
    Соответствует ли каждый передаваемый подтип точно одному типу возвращаемого значения?
  • 0
    Нет, это зависит от нескольких параметров либо в самом объекте, либо в состоянии программы ...
Теги:
design-patterns

1 ответ

1
Лучший ответ

В объектно-ориентированном программировании включение типа обычно осуществляется с помощью полиморфизма, либо путем перемещения метода create в SuperType (где он может быть переопределен для каждого Subtype), либо через шаблон посетителя.

Изменение: если вы не можете изменить класс, полиморфизм отсутствует. Но, к счастью, класс, похоже, поддерживает шаблон посетителя (см. Метод visit()), поэтому вы все равно можете его использовать.

  • 0
    Но чтобы использовать полиморфизм, я должен привести к фактическому подтипу, чего я не хочу.
  • 0
    Нет, полиморфизм не требует броска.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню