Кресты / Говнокод #1242 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
int GetControlImplementationsCount()
{
	//return 17;
	return 18;
}

CControlImplementation* GetControlImplementation(int index)
{
	switch (index)
	{
	case 0: return new CButtonImp();
	case 1: return new CFormImp();
	case 2: return new CLabelImp();
	case 3: return new CHorizontalAlignment();
	case 4: return new CVerticalAlignment();
	case 5: return new CMouseButton();
	case 6: return new CActionEvent();
	case 7: return new CMouseEvent();
	case 8: return new CWindowEvent();
	case 9: return new CCheckBoxImp();
	case 10: return new CComboBoxImp();
	case 11: return new CListBoxImp();
	case 12: return new CRadioButtonImp();
	case 13: return new CTextBoxImp();
	case 14: return new CItemEvent();
	case 15: return new CTextEvent();
	case 16: return new CButtonGroupImp();
	case 17: return new DialogImpl();
	}

	return NULL;
}

вот так кладут в ДВО РАН.

Запостил: guest guest, (Updated )

Комментарии (10) RSS

  • ну хотя бы так:
    1) сделать абстрактный класс-фабрику с функцией Create, которая вертает указатель на CControlImplementation
    2) сделать набор специализированных фабрик, по одной на каждый тип, наследованных от абстрактной. можно шаблон сделать и просто заинстансить с разными параметрами.
    3) сохранить их по указателям на абстрактную фабрику где-нибудь в массиве или мапе или еще чем
    4) в функции GetControlImplementation по индексу выбирать фабрику и звать у нее Create
    Ответить
  • Обращаю внимание на функцию GetControlImplementationsCount. Предложенный способ, на мой взгляд, не позволяет красиво ее реализовать (придется каждого потомка CControlImplementation отдельно регистрировать --- заносить в массив).
    P.S. Может здесь более глубокая ошибка проектирования и GetControlImplementationsCount не нужна?
    Ответить
  • и по хорошему у CControlImplementation должен быть метод, который возвращает свой тип.
    ЗЫ и автор очевидно не знаем про enum
    Ответить
  • №5, enum все равно предполагает перечисление всех подходящих классов в отдельном месте.

    №6, а какой из них. И из приведенного кода не ясна семантика системы.
    Ответить
  • и да, данный экземпляр кода по задумке авторов должен был выполнять роль фабрики.
    Ответить
  • Фабрику или хотябы
    список типов надо было использовать с автоматическим подсчётом кол-ва классов. Руки отрывать за такое надо и на костёр. А то константу использовали, да ещё и в коде.
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8