Форум программистов, компьютерный форум CyberForum.ru

Паттерн декоратор - C++

Восстановить пароль Регистрация
 
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
21.12.2013, 23:37     Паттерн декоратор #1
доброго времени суток уважаемые форумчане, помогите пожалуйста разобраться, где я допустил ошибку?
суть программы в том что бы слова содержащиеся в векторе выводить с использованием обоих декораторов(1 - реверс строки 2 - обрамление слова в скобки '[' ']'), у меня почему то получается так что выводится только с использованием второго декоратора. хотя в дебаге он заходит в первый и кажется что делает все что нужно.
содержимое файлов проекта:
BrachetPrinterDecorator.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "IMessagePrinter.h"
#include "iostream"
#include "memory"
#include "string"
class CBrachetPrinterDecorator : public IMessagePrinter
{
    IMessagePrinter* m_component;
public:
    CBrachetPrinterDecorator(IMessagePrinter* component) : m_component(component) {};
 
    void PrintStudents()
    {
        m_component->PrintStudents();
 
        std::string name;
        for (auto i = studentsName.begin(); i != studentsName.end(); i++)
        {
            name = *i;
            std::cout << '[' << name << ']'<< ", ";
        }
        std::cout << "\nbrachet decor\n";
 
    }
    ~CBrachetPrinterDecorator(){};
};
IMessagePrinter.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class IMessagePrinter
{
public:
    
    IMessagePrinter()
    {
        studentsName.emplace_back("valera");
        studentsName.emplace_back("vlad");
        studentsName.emplace_back("masha");
        studentsName.emplace_back("misha");
        studentsName.emplace_back("roma");
    };
    virtual void PrintStudents() = 0;
    ~IMessagePrinter(){};
    std::vector<std::string> studentsName;
MessagePrinter.h
C++
1
2
3
4
5
6
7
8
9
10
#include "IMessagePrinter.h"
#include "string"
#include "iostream"
class MessagePrinter : public IMessagePrinter
{
public:
    MessagePrinter(){};
    virtual void PrintStudents(){};
    ~MessagePrinter(){};
};
CReversePrinterDecorator.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "IMessagePrinter.h"
#include "memory"
#include "iostream"
#include "string"
#include "vector"
class CReversePrinterDecorator: public IMessagePrinter
{
    IMessagePrinter* m_component;
public:
    CReversePrinterDecorator(IMessagePrinter* component) : m_component(component) {}
    
    void PrintStudents()
    {
        std::vector<std::string> temp;
 
        for (int i = 0; i != studentsName.size(); i++)
        {
            std::string name = studentsName[i];
            std::reverse(name.begin(), name.end());
            temp.push_back(name);
        }
         m_component->studentsName = temp;
 
        m_component->PrintStudents();
 
        std::cout << "\nreverse decor\n";
 
    }
 
    ~CReversePrinterDecorator(){};
};
и под конец main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "BrachetPrinterDecorator.h"
#include "ReversePrinterDecorator.h"
#include "IMessagePrinter.h"
#include "MessagePrinter.h"
using namespace std;
int main(void)
{
    IMessagePrinter* rev = new CBrachetPrinterDecorator(new CReversePrinterDecorator(new MessagePrinter()));
    rev->PrintStudents();
    return 0;
}
заранее благодарен за помощь

Добавлено через 4 часа 58 минут
неужели никто не знаком с данным паттерном и не поможет мне?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 23:37     Паттерн декоратор
Посмотрите здесь:

C++ Паттерн Bridge
паттерн и строка C++ C++
C++ Паттерн Builder
Паттерн стратегия C++
C++ Паттерн Interpreter и грамматика
Паттерн Singleton C++
C++ Паттерн Embedded Value
Как реализовать паттерн C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tyg
1 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 1
06.02.2015, 12:59     Паттерн декоратор #2
Хоть сообщение давно устарело, но может кому понадобится.
В классе CBrachetPrinterDecorator
функция m_component->PrintStudents(); вызывается ДО обрамления скобками.
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
06.02.2015, 13:49  [ТС]     Паттерн декоратор #3
Цитата Сообщение от tyg Посмотреть сообщение
Хоть сообщение давно устарело, но может кому понадобится.
В классе CBrachetPrinterDecorator
функция m_component->PrintStudents(); вызывается ДО обрамления скобками.
Именно так, я с этим долго разбирался но все же нашел решение.
Yandex
Объявления
06.02.2015, 13:49     Паттерн декоратор
Ответ Создать тему
Опции темы

Текущее время: 00:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru