蜗牛的家
男儿当自强
posts - 48,  comments - 21,  trackbacks - 0
意图:
将一个复杂的对象的构建与他的表示分离,使得相同的构建过程可以构建出不同的表示
适用:
当创建对象的算法应该独立于该对象的的组成部分以及他们的装配方式时
相同的构造过程允许构造对象的不同表示时
UML图:

//test.h
//////////////////////////////////////////////////////////////////////////
// 虚拟基类,是所有Builder的基类,提供共同的构建各部分接口函数
class Builder
{
public:
    Builder()
{}
    
virtual ~Builder(){}
    
    
virtual void BuilderPartA() = 0;
    
virtual void BuilderPartB() = 0;
}
;

// 通用的构建产品的基类,根据不同的Builder构建不同的产品
class Director
{
public:
    Director(Builder
* pBuilder);
    
~Director();
    
    
void Construct();
private:
    Builder
* m_pBuilder;
}
;

//产品类,继承自产品基类,并完成各个部分构建的函数
class ConCreateBuilder1 : public Builder
{
public:
    ConCreateBuilder1()
{}
    
virtual ~ConCreateBuilder1(){}
    
    
virtual void BuilderPartA();
    
virtual void BuilderPartB();
}
;
class ConCreateBuilder2 : public Builder
{
public:
    ConCreateBuilder2()
{}
    
virtual ~ConCreateBuilder2(){}

    
virtual void BuilderPartA();
    
virtual void BuilderPartB();
}
;

// test.cpp : Defines the entry point for the console application.
//

#include 
"stdafx.h"
#include 
<iostream>
#include 
"stdlib.h"
#include 
"test.h"

using namespace std;
//////////////////////////////////////////////////////////////////////////
Director::Director(Builder* pBuilder) : m_pBuilder(pBuilder)
{
}


Director::
~Director()
{
    delete m_pBuilder;
    m_pBuilder 
= NULL;
}


void ConCreateBuilder1::BuilderPartA()
{
    cout 
<< "BuilderPartA by ConCreateBuilder1\n";
}

void ConCreateBuilder1::BuilderPartB()
{
    cout 
<< "BuilderPartB by ConCreateBuilder1\n";
}

void ConCreateBuilder2::BuilderPartA()
{
    cout 
<< "BuilderPartA by ConCreateBuilder2\n";
}

void ConCreateBuilder2::BuilderPartB()
{
    cout 
<< "BuilderPartB by ConCreateBuilder2\n";
}


//通用的构建过程,根据不同的Bulider构建出不同的实例
void Director::Construct()
{
    m_pBuilder
->BuilderPartA();
    m_pBuilder
->BuilderPartB();
}

//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
    Builder
* pBuilder1 = new ConCreateBuilder1;
    Director
* pDirector = new Director(pBuilder1);
    pDirector
->Construct();
    
    Builder
* pBuilder2 = new ConCreateBuilder2;
    Director
* pDirector2 = new Director(pBuilder2);
    pDirector2
->Construct();

    delete pDirector;
    delete pDirector2;

    system(
"pause");
    
return 0;
}

posted on 2008-08-16 17:44 黑色天使 阅读(302) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜