Builder模式

Builder

1.意圖

將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.Builder模式的核心是聚合

Director負責指揮,知道要做什麼,Builder負責實施,負責做出來.

Builder接口中封裝如何創建一個個部件,Director的將部件組裝成成品.

2.代碼

#include<iostream>

usingnamespacestd;

//product

classCFrame

{

public:

    virtualvoiddraw()=0;

};

//一橫

classCOneAcross:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawoneacrossline!"<<endl;

    }

};

//兩橫

classCTwoAcross:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawtwoacrossline!"<<endl;

    }

};

//三橫

classCThreeAcross:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawthreeacrossline!"<<endl;

    }

};

//一豎

classCOneVertical:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawoneverticalline!"<<endl;

    }

};

//兩豎

classCTwoVertical:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawtwoverticalline!"<<endl;

    }

};

//三豎

classCThreeVertical:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawthreeverticalline!"<<endl;

    }

};

//一點

classCOneDot:publicCFrame

{

public:

    virtualvoiddraw()

    {

        cout<<"drawonedot!"<<endl;

    }

};

 

//字符結構

classCCharacter:publicCFrame

{

public:

    #defineFRAME_MAX_NUM10

    CCharacter()

    {

        m_frameNum=0;

    }

    virtualvoidAddFrame(CFrame*frame)

    {

        if(m_frameNum<FRAME_MAX_NUM)

        {

            m_frame[m_frameNum]=frame;

            m_frameNum++;

        }

    }

    virtualvoiddraw()

    {

        cout<<"drawcharacter!"<<endl;

        for(inti=0;i<m_frameNum;i++)

        {

            m_frame[i]->draw();

        }

    }

 

    CFrame*m_frame[FRAME_MAX_NUM];

    intm_frameNum;

};

 

//builder創建部件

classCCharacterBuilder

{

protected:

    CCharacterBuilder(){}

public:

    virtualvoidBuilderAcross(){}

    virtualvoidBuilderDot(){}

    virtualvoidBuilderVertical(){}

    virtualCCharacter*GetCharacter(){returnNULL;}

};

 

//

classCCharacterOneBuilder:publicCCharacterBuilder

{

public:

    CCharacterOneBuilder()

    {

        m_pCharacter=newCCharacter();

    }

    virtualvoidBuilderAcross()

    {

        CFrame*cross=newCThreeAcross();

        m_pCharacter->AddFrame(cross);

    }

 

    virtualvoidBuilderVertical()

    {

        CFrame*vertical=newCOneVertical();

        m_pCharacter->AddFrame(vertical);

    }

 

    virtualvoidBuilderDot()

    {

    }

 

    virtualCCharacter*GetCharacter()

    {

        returnm_pCharacter;

    }

 

private:

    CCharacter*m_pCharacter;

};

 

//

classCCharacterTwoBuilder:publicCCharacterBuilder

{

public:

    CCharacterTwoBuilder()

    {

        m_pCharacter=newCCharacter();

    }

    virtualvoidBuilderAcross()

    {

        CThreeAcross*cross=newCThreeAcross();

        m_pCharacter->AddFrame(cross);

    }

 

    virtualvoidBuilderVertical()

    {

        COneVertical*vertical=newCOneVertical();

        m_pCharacter->AddFrame(vertical);

    }

 

    virtualvoidBuilderDot()

    {

        COneDot*dot=newCOneDot();

        m_pCharacter->AddFrame(dot);

    }

 

    virtualCCharacter*GetCharacter()

    {

        returnm_pCharacter;

    }

 

private:

    CCharacter*m_pCharacter;

};

 

//director組裝成品

classCCharacterDirector

{

public:

    CCharacterDirector(CCharacterBuilder*builder)

    {

        m_pCharacterBuilder=builder;

    }

    virtualCCharacter*CreateCharacter()

    {

        m_pCharacterBuilder->BuilderAcross();

        m_pCharacterBuilder->BuilderVertical();

        m_pCharacterBuilder->BuilderDot();

        returnm_pCharacterBuilder->GetCharacter();

    }

 

private:

    CCharacterBuilder*m_pCharacterBuilder;

};

 

intmain()

{

    cout<<"HelloWorld!"<<endl;

    CCharacterBuilder*ChaOne=newCCharacterThreeBuilder();

    CCharacterDirector*director=newCCharacterDirector(ChaOne);

    CCharacter*character=director->CreateCharacter();

//    CCharacter*character=ChaOne->GetCharacter();

    character->draw();

    return0;

}

 

 

發佈了40 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章