10、建造者模式(Builder)

来源:互联网 发布:火焰恶作剧屏幕软件 编辑:程序博客网 时间:2024/05/04 08:53
要生产一个可以带有设置某些属性的对象,可以直接产生,可以定义一个创建者,其提供设置接口函数,并提供对象获取接口,将某一类产品封装起来,后面需要此产品时只需要调用创建者的创建接口就可以了。
另外可以进一步对创建者进行封装,将其封装成一个可以有多个预订设置的类(Director),这个类的每一个预订设置都提供一个创建接口,这样需要某个预订设置产品时只需要调用对应的接口就可以了。


main()
{
    //不使用模式,直接产生对象
    BenzModel *pBenz = new BenzModel();
    pBenz->SetSequence(&seq);
    pBenz->Run();
    delete pBenz;


    //定义设置seq
    vector<string> seq;           
    seq.push_back("engine boom");
    seq.push_back("start");
    seq.push_back("stop");


    //建造者benzBuilder使用seq去创建对象
    BenzBuilder benzBuilder;
    benzBuilder.SetSequence(&seq);
    BenzModel *pBenza = dynamic_cast<BenzModel*>(benzBuilder.GetCarModel());
    pBenza->Run();
    //delete pBenza;   //有Director的情况下,在这里delete会产生“段错误 (核心已转储)”错误


    //建造者bmwBuilder使用seq去创建对象
    BMWBuilder bmwBuilder;
    bmwBuilder.SetSequence(&seq);
    BMWModel *pBmw = dynamic_cast<BMWModel*>(bmwBuilder.GetCarModel());
    pBmw->Run();
    //delete pBmw;   //有Director的情况下,在这里delete会产生“段错误 (核心已转储)”错误


    //调用预订设置者Director的接口去创建对象
    Director director;
    for(int i = 0; i < 2; i++)
        director.GetABenzModel()->Run();
}
0 0
原创粉丝点击