Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Какой паттерн применить


Автор: xTr1m 10.2.2010, 09:35
Доброго времени суток. Есть примерно следующая задача:
Пользователь нажимает кнопку создать объект, открывается диалог. В этом диалоге можно также создавать объекты, которые будут как атрибуты,
и этих атрибутов также можно создать свои объекты. Далее пользователь может нажать ОК или Отмену. Очень не хочется создавать все объекты,
а потом их удалять при отмене. То есть получается, что нужно использовать некую схему (универсальную, для любого уровня вложенности), 
при которой объекты сразу не создаются. Наверняка есть какой-то паттерн, может кто подскажет?

Автор: NewDima 10.2.2010, 11:21
Неужели в процессе "создания" объекта он действительно создается? Не проще ли получить всю нужную информацию о требуемом объекте, а потом его уже создать?

Автор: zim22 10.2.2010, 12:08
Цитата(xTr1m @  10.2.2010,  08:35 Найти цитируемый пост)
В этом диалоге можно также создавать объекты, которые будут как атрибуты,и этих атрибутов также можно создать свои объекты

паттерн Композитор приходит на ум

Автор: dix75 10.2.2010, 17:54
Цитата(xTr1m @  10.2.2010,  09:35 Найти цитируемый пост)
свои объекты

а что за объекты

Автор: SenkraD 10.2.2010, 18:10
[B]xTr1m,  как вариант можно собирать метаданные и только по
окончанию, если всё  ок, создать обьект. По реализации на ум приходит тотже композитор,
а для метаданных, как по мне, лучше всего подойдёт какой-то обьект типа XmlElement[/B]

Автор: xTr1m 11.2.2010, 09:45
Насчет композитора, почитал. Сейчас вот обмозговываю как бы его прикрутить =)) Объекты - это объекты базы данных по сути. То есть, скажем, создаем 
деталь, у нее есть "поддеталь", у которой есть характеристики (тоже объекты).

Автор: mes 11.2.2010, 10:02
Цитата(xTr1m @  11.2.2010,  08:45 Найти цитируемый пост)
То есть, скажем, создаем 
деталь, у нее есть "поддеталь", у которой есть характеристики (тоже объекты).

Код

class Article 
{
     public:
        virtual ~Article (){}
        ...
};

class ArticleDraft
{
   public:
        virtual ~ArticleDraft (){}
 
        void AddChild (ArticleDraft *);
    
        Article * ProduceAll ()   
        { 
            Article * _this = Produce (NULL);

            for ( ..* it = m_childs.begin(); it != m_childs.end(); ++it) )
               it->Produce (_this); 

            return _this;
        }
        virtual Article * Produce (Article * parent) =0;
        ...
};

Автор: xTr1m 12.2.2010, 09:25
Насколько я понял, это как раз реализация композитора? Спасибо.

Автор: mes 12.2.2010, 10:00
Цитата(xTr1m @  12.2.2010,  08:25 Найти цитируемый пост)
Насколько я понял, это как раз реализация композитора?

Не совсем. Вы вначале озвучили две проблемы

Цитата(xTr1m @  10.2.2010,  08:35 Найти цитируемый пост)
создавать объекты, которые будут как атрибуты,
и этих атрибутов также можно создать свои объекты.

для этого подходит композиция


Цитата(xTr1m @  10.2.2010,  08:35 Найти цитируемый пост)
То есть получается, что нужно использовать некую схему (универсальную, для любого уровня вложенности), 
при которой объекты сразу не создаются. 

для этого подходит сбор метаданных и на их основании создавать объекты если нужно.

в примере отражены оба подхода, как один из вариантов решения Вашей задачи.

P.S. имхо  это плохой подохд применять паттерн вслепую, не осознавая, что именно скрыто за ним.
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)