- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 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 24.06.2009 08:58 # 0
guest 24.06.2009 10:06 # 0
1) сделать абстрактный класс-фабрику с функцией Create, которая вертает указатель на CControlImplementation
2) сделать набор специализированных фабрик, по одной на каждый тип, наследованных от абстрактной. можно шаблон сделать и просто заинстансить с разными параметрами.
3) сохранить их по указателям на абстрактную фабрику где-нибудь в массиве или мапе или еще чем
4) в функции GetControlImplementation по индексу выбирать фабрику и звать у нее Create
guest 24.06.2009 10:50 # 0
P.S. Может здесь более глубокая ошибка проектирования и GetControlImplementationsCount не нужна?
guest 24.06.2009 11:28 # 0
guest 24.06.2009 11:30 # 0
ЗЫ и автор очевидно не знаем про enum
guest 24.06.2009 11:33 # −1
можешь покурить паттерны
http://ru.wikipedia.org/wiki/Шаблон_проектирования
guest 24.06.2009 18:15 # 0
№6, а какой из них. И из приведенного кода не ясна семантика системы.
guest 24.06.2009 22:47 # 0
фабрика конечно же :)
guest 25.06.2009 06:36 # 0
guest 28.06.2009 01:12 # 0
список типов надо было использовать с автоматическим подсчётом кол-ва классов. Руки отрывать за такое надо и на костёр. А то константу использовали, да ещё и в коде.