Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Wzorce projektowe

budowniczy

[wzorzec projektowy] Dostarcza mechanizm do konwersji danych z konkretnego formatu wejścowego do dowolnego formatu wyjściowego.

Budowa wzorca projektowego

C/C++
class CSomeData //INFO: dane, czyli opis formatu danych wejściowych
{
public:
    enum DataTypeE { E_CHAR, E_FONT_SIZE, E_MARGINS, E_UNKNOWN };
    //INFO: obiekt zawierający dane do przekonwertowania
    DataTypeE m_eDataType;
    char m_cChar;
    int m_iSize;
    int m_iMarginLeft;
    int m_iMarginRight;
};

class IConverter //INFO: interfejs budowniczego
{
public:
    virtual std::string getResult() const = 0;
    virtual void parse( const CSomeData & someData ) = 0;
};

class CDirector //INFO: kierownik
{
    typedef std::vector < CSomeData > VDataT;
    VDataT m_vData;
public:
    void loadData( const char * sData ); //INFO: metoda wczytująca konkretną postać danych do kontenera m_vData
    void convert( IConverter & converter ) const
    {
        for( VDataT::const_iterator i = m_vData.begin(); i != m_vData.end(); i++ )
             converter.parse( * i );
       
    }
};

class CConverter_TXT
    : public IConverter //INFO: budowniczy
{
public:
    //INFO: klasa zawierająca określoną implementację konwersji danych;
    virtual std::string getResult() const;
    virtual void parse( const CSomeData & someData );
};

class CConverter_HTML
    : public IConverter //INFO: budowniczy
{
public:
    //INFO: klasa zawierająca określoną implementację konwersji danych;
    virtual std::string getResult() const;
    virtual void parse( const CSomeData & someData );
};

Opis szczegółowy

Budowniczy (ang. builder) - wzorzec projektowy, który dostarcza mechanizm do konwersji danych z konkretnego formatu wejściowego do dowolnego formatu wyjściowego. Wzorzec zapewnia łatwy mechanizm dostarczania nowych formatów danych wyjściowych bez konieczności modyfikacji obiektu zarządzającego (tzw. kierownika).

Zastosowanie

Niniejszy wzorzec stosuje się gdy:
  • chcemy przekonwertować te same dane do kilku różnych postaci;
  • chcemy sobie zagwarantować możliwość łatwego dodawania obsługi nowego formatu danych wyjściowych, zapobiegając jednocześnie jakimkolwiek modyfikacjom klasy zarządzającej obiektami budowniczymi.