Показать сообщение отдельно
Старый 23.06.2010, 11:25   #1
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Описатели (Descriptors)

в своем движке применяю такую технику - объекты (движОк, текстура, окно, шрифт) создаются не через параметры, например:
Texture *tex = eng->LoadTexture("somefile.jpg",TF_ANISOTROPIC,TBM_ADD)
или
Font *fnt = eng->LoadFont("Times New Roman",14,FF_BOLD,FM_TEXCASH)
а черех описатели (Descriptors)

Texture * tex = eng->LoadTexture(TextureDesc("somefile.jpg").blend(TBM_ADD));
или
Font *fnt = eng->LoadFont(FontDesc("Times New Roman").bold(1));
минусы техники:
* обычно - больше букаф
* дополнительный класс на объект

плюсы техники:
* в сочетании с патерном мост облегчает несколько сопровождение кода при добавлении нового параметра (не нужно менять список параметров конструктора(ов) в IObject.h, CObject.h и CObject.cpp)
* можно хранить дескриптор в объекте и пользоваться фишками типа:
Font *newfont = eng->LoadFont(oldfont->GetDescriptor().bold(0));
- не знаю что за шрифт oldfont, но хаачу такой же - только нежирным чтобы был.
* можно пользоваться чем-то вроде именованных параметров, при грамотном определении умолчаний можно существенно сократить количество вводимых параметров.
* можно использовать "специальные" конструкторы. например для текстуры size(int) будет задавать одновременно и ширину и высоту (и глубину, если текса трехмерная)
* инвариант параметров. например ширина окна не может быть больше ширины дисплея, если только окно не фейковое. Правда его прийдется в конструкторе класса один фиг проверять снова, так как члены данных придется делать открытыми, чтобы конструкторы объектов имели к ним доступ. ненадежно.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Mhyhr (23.06.2010), Mr_F_ (23.06.2010), Samodelkin (27.06.2010)