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;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值