Архитектура движка.Статьи

Паттерны GoF - Builder (лекция) (2 стр)

Автор:

<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> да

  • kas нипанимает
  • <Rageous|zZzZz> суть в том, что билдер знает, как делать объекты
    <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> обсуждение окончено?

    Страницы: 1 2

    20 января 2006