Паттерны GoF - Builder (лекция) (2 стр)
Автор: MiF
<MiF> http://www.everfall.com/paste/id.php?pq4latslg1vq
<MiF> фтыкайте
<Rageous|zZzZz> 2) создание директора с билдером
<Rageous|zZzZz> 3) вызов метора директора, который вызывает нужные функции
билдера
<Rageous|zZzZz> 4) получение результата от билдера
<Sark7> скажите
<Sark7> а почему сразу не вызывать нужны функции билдера
<Sark7> *нужные
<Rageous|zZzZz> потому что конструирование может быть сложным
<Sark7> так билдер ведь конструирует
<kas> что значит сложным
<MiF> именно
<Sark7> а не директор
<MiF> билдер дает интерфейс
<MiF> для конструирования
<Sark7> вот в билдере вся сложность и будет, в builder::createfromdata(...)
<Sark7> во
<MiF> а директор конструирует используя билдер
<Sark7> T createfromdata(...)
<kas> virtual Tank* GetTank() = 0;
<kas> вот всё конструирование
<kas> или я чевото нипанимаю?
<Rageous|zZzZz> кас, ну, а что в гет-танке-то?
<Rageous|zZzZz> директор может:
<xmvlad> всем привет
<MiF> танк - композитный объект
<MiF> состоит из дофига всего
<Rageous|zZzZz> 1) загрузить конфиг и подумать над ним, создав нужный объект по
нему
<kas> ну, пусть состоит
<Rageous|zZzZz> 2) создать, скажем, объект из потока
<Rageous|zZzZz> 3) прочитать хитрую таблицу и создать по ней
<Rageous|zZzZz> и т.п.
<kas> херня какаято
<Rageous|zZzZz> суть в том, что он реашет, что вызвать у билдера
<kas> а почему билдер не может ето сделать?
<Sark7> не
<Rageous|zZzZz> билдер только компонует, но он не знает, что ему компонавать
<Sark7> я понел
<Sark7> суть в том что по частям
<MiF> да
<Rageous|zZzZz> но сколько и каких - не знает
<MiF> kas, код смотрел?
<kas> смарю, да
<Sark7> директар может построить танк без пушки
<xmvlad> э... в чем пойнт? :))
<Sark7> например
<Sark7> хотя
<Rageous|zZzZz> пойт в том, чтоб создавать разные конфигурации объектов
<Sark7> будит ли он работать
<Rageous|zZzZz> *пойнт
<kas> его можно и так построить
<MiF> вот представь, что там не только пушка и все остальное, а дофига всего и
за созданием нужно следить
<kas> без пушки
<kas> ну, пусть дофига
<MiF> и следить надо
<MiF> за процессом
<Rageous|zZzZz> и куда ты этот код положишь?
<Rageous|zZzZz> вместо директора
<xmvlad> объекты конструкторы?
<Sark7> хотя не
<Sark7> я нипонял
<kas> что значит куда положишь
<Sark7> GetTank же есть
<kas> ага
<Sark7> тогда директар нафиг не нужен
<kas> я тоже самое
<Rageous|zZzZz> это получение собранного танка
<kas> нипанимаю
<MiF> директор нужен!
<Rageous|zZzZz> а не создание танка
<kas> зачем?
<MiF> это клиент билдера, он определяет сборку
<Rageous|zZzZz> директор указывает, что добавить к танку - порядок сборки,
состав и т.п.
<kas> ну, CreateTank()
<MiF> и дает готовый собранный объект
<kas> и попёрли
<MiF> ну да
<MiF> считай так
<Sark7> как он добавит
<kas> зачем объект
<kas> выделять
<Sark7> если GetTank уже есть
<Sark7> в билдере а не в директаре
<MiF> CreateTank(TankBuilder*) = директор
<Rageous|zZzZz> геттанк не собирает объект!
<kas> бугага
<Rageous|zZzZz> геттанк - это получение результата сборки, не более
<Sark7> а что же он делает
<MiF> Rageous прав
<Rageous|zZzZz> там тупо return m_tank
<Sark7> а
<Sark7> понел
<MiF> именно
<MiF> собирает директор
<Sark7> лучше бы не BuildGun тогда а AddGun назвали
<Sark7> было бы понятней
<kas> ага
<Rageous|zZzZz> а в криэйттанк: b.buildGun(veryLarge); b.buildBase(reallyHuge);
<Sark7> что можно и без Gun собрать
<MiF> ок
<MiF> это мелочи
<Sark7> ну или так
<MiF> всем все ясно?
<Rageous|zZzZz> либо просто b.buildBase(smallAndWeak) - и будет без пушки
<Sark7> я вот тогда не поймю
<Sark7> хотя не
<Sark7> ладна
<Sark7> ясно )
<MiF> обсуждение окончено?
20 января 2006