Реализация фабрики классов
От: Niggar  
Дата: 12.08.05 07:38
Оценка:
Есть ли у кого какие-нибудь идеи по оптимизации реализации фабрики классов.

К примеру:

class r{};

class r1: public r {...};
class r2: public r {...};
class r3: public r {...};

r* getObject( int rid )
{
switch(rid)
{
case 1: return new r1();
case 2: return new r2();
case 3: return new r3();
}
}


Как можно реализовать фабрику без использования switch... так чтобы в дальнейшем можно было бы более элегентно добавлять создание новых классов?
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(). Поиск по мапу, если я не ошибаюсь, будет работать быстрее свича. Кроме того, можно динмамически изменять список классов, объекты которых может создавать фабрика.
Если не хочется (или нельзя) держать прототипы, то можно в мапе хранить указатели на функции, создающие объекты.
Удачи тебе, браток!
Re: Реализация фабрики классов
От: Анатолий Широков СССР  
Дата: 12.08.05 07:58
Оценка:
Посмотрите http://www.rsdn.ru/Forum/Message.aspx?mid=130926&only=1
Автор: Анатолий Широков
Дата: 13.11.02
Re[2]: Реализация фабрики классов
От: gbt Россия  
Дата: 12.08.05 08:06
Оценка:
Hello, Glоbus, you wrote:

> имеющий метод Close(). Поиск по мапу, если я не ошибаюсь, будет

> работать быстрее свича.
Оптимизирующие компиляторы сейчас генерируют код для свича, который
работает за время log n, где n — количество case'ов, поэтому скорость
свича и map'а из STL одинаковы.

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re: Реализация фабрики классов
От: pf79 Украина  
Дата: 12.08.05 13:54
Оценка:
Здравствуйте, Niggar, Вы писали:

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


А я бы посоветовал не изобретать своих велосипедов и использовать уже готовые.
Например
http://sourceforge.net/projects/loki-lib (Factory.h)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.