Builder(生成器)---对象创建型模式
2009-06-25 21:12
459 查看
作用:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
解析:Builder 接口下面有不同组成部分,但组成部分的装配方式是一样的,比方说一辆单车,都是由车轮车座等等的构成的(一个对象不同的组成部分),不同的品牌生产出来的也不一样(不同的构建方式).虽然不同的品牌构建出来的单车不同,但是构建的过程还是一样的。
附:软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。
变化点在哪里,封装哪里----Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动
// 虚拟基类,是所有Builder的基类,提供不同部分的构建接口函数
class Builder
{
public :
Builder() {} ;
virtual ~ Builder() {}
// 纯虚函数,提供构建不同部分的构建接口函数
virtual void BuilderPartA() = 0 ;
virtual void BuilderPartB() = 0 ;
} ;
class ConcreateBuilder1
: public Builder
{
public :
ConcreateBuilder1() {}
virtual ~ ConcreateBuilder1() {}
virtual void BuilderPartA();
virtual void BuilderPartB();
} ;
// Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class ConcreateBuilder2
: public Builder
{
public :
ConcreateBuilder2() {}
virtual ~ ConcreateBuilder2() {}
virtual void BuilderPartA();
virtual void BuilderPartB();
} ;
void ConcreateBuilder1::BuilderPartA()
{
std::cout << " BuilderPartA by ConcreateBuilder1/n " ;
}
void ConcreateBuilder1::BuilderPartB()
{
std::cout << " BuilderPartB by ConcreateBuilder1/n " ;
}
void ConcreateBuilder2::BuilderPartA()
{
std::cout << " BuilderPartA by ConcreateBuilder2/n " ;
}
void ConcreateBuilder2::BuilderPartB()
{
std::cout << " BuilderPartB by ConcreateBuilder2/n " ;
}
class Director
{
public :
Director(Builder * pBuilder);
~ Director();
void Construct();
private :
Builder * m_pBuilder;
} ;
Director::Director(Builder * pBuilder)
: m_pBuilder(pBuilder)
{
}
Director:: ~ Director()
{
delete m_pBuilder;
m_pBuilder = NULL;
}
// Construct 函数表示一个对象的整个构建过程,不同的部分之间的装配方式都是一致的,
// 首先构建PartA其次是PartB,只是根据不同的构建者会有不同的表示
void Director::Construct()
{
m_pBuilder -> BuilderPartA();
m_pBuilder -> BuilderPartB();
}
int main()
{
Builder * pBuilder1 = new ConcreateBuilder1;
Director * pDirector1 = new Director(pBuilder1);
pDirector1 -> Construct();
Builder * pBuilder2 = new ConcreateBuilder2;
Director * pDirector2 = new Director(pBuilder2);
pDirector2 -> Construct();
delete pDirector1;
delete pDirector2;
system( " pause " );
return 0 ;
}
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
解析:Builder 接口下面有不同组成部分,但组成部分的装配方式是一样的,比方说一辆单车,都是由车轮车座等等的构成的(一个对象不同的组成部分),不同的品牌生产出来的也不一样(不同的构建方式).虽然不同的品牌构建出来的单车不同,但是构建的过程还是一样的。
附:软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。
变化点在哪里,封装哪里----Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动
// 虚拟基类,是所有Builder的基类,提供不同部分的构建接口函数
class Builder
{
public :
Builder() {} ;
virtual ~ Builder() {}
// 纯虚函数,提供构建不同部分的构建接口函数
virtual void BuilderPartA() = 0 ;
virtual void BuilderPartB() = 0 ;
} ;
class ConcreateBuilder1
: public Builder
{
public :
ConcreateBuilder1() {}
virtual ~ ConcreateBuilder1() {}
virtual void BuilderPartA();
virtual void BuilderPartB();
} ;
// Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class ConcreateBuilder2
: public Builder
{
public :
ConcreateBuilder2() {}
virtual ~ ConcreateBuilder2() {}
virtual void BuilderPartA();
virtual void BuilderPartB();
} ;
void ConcreateBuilder1::BuilderPartA()
{
std::cout << " BuilderPartA by ConcreateBuilder1/n " ;
}
void ConcreateBuilder1::BuilderPartB()
{
std::cout << " BuilderPartB by ConcreateBuilder1/n " ;
}
void ConcreateBuilder2::BuilderPartA()
{
std::cout << " BuilderPartA by ConcreateBuilder2/n " ;
}
void ConcreateBuilder2::BuilderPartB()
{
std::cout << " BuilderPartB by ConcreateBuilder2/n " ;
}
class Director
{
public :
Director(Builder * pBuilder);
~ Director();
void Construct();
private :
Builder * m_pBuilder;
} ;
Director::Director(Builder * pBuilder)
: m_pBuilder(pBuilder)
{
}
Director:: ~ Director()
{
delete m_pBuilder;
m_pBuilder = NULL;
}
// Construct 函数表示一个对象的整个构建过程,不同的部分之间的装配方式都是一致的,
// 首先构建PartA其次是PartB,只是根据不同的构建者会有不同的表示
void Director::Construct()
{
m_pBuilder -> BuilderPartA();
m_pBuilder -> BuilderPartB();
}
int main()
{
Builder * pBuilder1 = new ConcreateBuilder1;
Director * pDirector1 = new Director(pBuilder1);
pDirector1 -> Construct();
Builder * pBuilder2 = new ConcreateBuilder2;
Director * pDirector2 = new Director(pBuilder2);
pDirector2 -> Construct();
delete pDirector1;
delete pDirector2;
system( " pause " );
return 0 ;
}
相关文章推荐
- 创建模式(Builder Pattern、构建模式、生成器,对象创建型模式)
- 对象创建型模式------Builder(生成器或建造者模式)(2)
- 1.2 Builder(生成器) -- 对象创建型模式
- BUILDER(生成器)—对象创建型模式
- 设计模式三:Builder 生成器——对象创建型模式
- 设计模式 3.2 Builder(生成器)对象创建型模式
- 创建型模式(二)、BUILDER(生成器)---对象创建型模式
- Builder(生成器)-对象创建型模式
- 对象创建型模式------Builder(生成器)
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四
- 创建模式(Builder Pattern、构建模式、生成器,对象创建型模式)
- 设计模式之生成器(Builder)----对象创建型模式
- 设计模式之BUILDER(生成器)—对象创建型模式
- 设计模式之五:BUILDER(生成器)—对象创建型模式
- 设计模式(5)-对象创建型模式-Builder模式
- 设计模式杂谈:创建型模式之生成器模式(Builder Pattern)
- 【设计模式】创建型模式之生成器Builder
- 创建型模式:Builder(生成器)
- 生成器模式——对象创建型模式
- C#面向对象设计模式纵横谈(4):Builder 生成器(创建型模式)