Какой хороший способ реализовать Switch Case для кода ниже? - PullRequest
0 голосов
/ 25 марта 2019

В большинстве случаев я обнаружил использование полиморфизма вместо оператора Switch. Я знаю, что лучше использовать полиморфизм, если в случае коммутатора все случаи разные.

что произойдет, если несколько случаев имеют одинаковый код! какой подход хорош? полиморфизм или случай переключателя.

например:

QList<QString> ret;
switch (x) 
   { 
       case A1: 
       case A2: ret = QList<QString>() <<"A" <<"B" <<"C" ;
               break; 
       case A3:
       case A4: ret = QList<QString>() <<"E" <<"F" <<"G" << "H" <<"T" ; 
               break; 
       case A5:
       case A6:
       case A7: ret = QList<QString>() <<"H" <<"F" <<"K" << "L" <<"T" ; 
               break; 
       default: ret = QList<QString>(); 
                break;   
   } 

Если я использую полиморфизм.

1) Если я создаю отдельный класс для случая A1 - A7, тогда мне может потребоваться создать отдельную копию QList () во всем производном классе (A1 - A7). Я думаю, что он будет использовать больше памяти.

Я поставил только пример кода, мой код отличается.

пожалуйста, кто-нибудь предлагает мне, какой подход хорош для такой ситуации?

Спасибо.

1 Ответ

0 голосов
/ 26 марта 2019

Ваш вопрос на самом деле не о Qt, а о программировании ООП в целом, не так ли? Единого универсального ответа не существует, это зависит от сложности кода. Для вашего примера это выглядит как switch, но по мере увеличения сложности полиморфизм становится лучшим выбором.

Ваш случай может выглядеть примерно так:

              base class containing the List
              /              |             \ 
             /               |              \ 
  intermediate 1-2    intermediate 3-4    intermediate 5-6-7
     /     \              /     \             /   |   \ 
    A1     A2            A3     A4           A5  A6   A7

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

...