Re: Реализация фабрики классов
От: Glоbus Украина  
Дата: 12.08.05 07:44
Оценка:
Здравствуйте, Niggar, Вы писали:

N>Есть ли у кого какие-нибудь идеи по оптимизации реализации фабрики классов.


N>К примеру:


N>class r{};


N>class r1: public r {...};

N>class r2: public r {...};
N>class r3: public r {...};

N>r* getObject( int rid )

N>{
N> switch(rid)
N> {
N> case 1: return new r1();
N> case 2: return new r2();
N> case 3: return new r3();
N> }
N>}


N>Как можно реализовать фабрику без использования switch... так чтобы в дальнейшем можно было бы более элегентно добавлять создание новых классов?


Ну например можно сделать так. Заводим std::map у которого ключ — это айдитшник класса, а значение например прототип — объект класса, имеющий метод Close(). Поиск по мапу, если я не ошибаюсь, будет работать быстрее свича. Кроме того, можно динмамически изменять список классов, объекты которых может создавать фабрика.
Если не хочется (или нельзя) держать прототипы, то можно в мапе хранить указатели на функции, создающие объекты.
Удачи тебе, браток!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.