Riordon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
引言: 一个产品(如电脑)有几个必要的部件组成,如:CPU、内存、显示器等等,部件相同,而其实现不同,这就造就了品牌,怎样抽象出这样的模型呢?

Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。

实现(核心部分)

CBuilder抽象类

View Code
 1 class CBuilder  
 2 {
 3 public:
 4     CBuilder();
 5     virtual ~CBuilder();
 6 
 7     virtual void BilderPartA() = 0;
 8     virtual void BilderPartB() = 0;
 9 
10 };

CConcreateBuilder1具体类1

View Code
1 class CConcreateBuilder1 : public CBuilder  
2 {
3 public:
4     CConcreateBuilder1();
5     virtual ~CConcreateBuilder1();
6 
7     virtual void BilderPartA();
8     virtual void BilderPartB();
9 };
View Code
 1 CConcreateBuilder1::CConcreateBuilder1()
 2 {
 3 
 4 }
 5 
 6 CConcreateBuilder1::~CConcreateBuilder1()
 7 {
 8 
 9 }
10 
11 void CConcreateBuilder1::BilderPartA()
12 {
13     cout<<"Create CConcreateBuilder1->BilderPartA!"<<endl;
14 }
15 
16 void CConcreateBuilder1::BilderPartB()
17 {
18     cout<<"Create CConcreateBuilder1->BilderPartB!"<<endl;
19 }

CConcreateBuilder2具体类2(同上)

CDirector指挥者类

View Code
 1 class CDirector  
 2 {
 3 public:
 4     CDirector();
 5     CDirector(CBuilder *pBuilder);
 6     virtual ~CDirector();
 7     
 8     void Construct();
 9     
10 private:
11     CBuilder *m_pBuilder;
12 
13 };
View Code
 1 CDirector::CDirector()
 2 {
 3 
 4 }
 5 
 6 CDirector::CDirector(CBuilder *pBuilder)
 7 {
 8     m_pBuilder = pBuilder;
 9 }
10 
11 CDirector::~CDirector()
12 {
13 
14 }
15 
16 void CDirector::Construct()
17 {
18     m_pBuilder->BilderPartA();
19     m_pBuilder->BilderPartB();
20 }

客户端

 

int main(int argc, char* argv[])
{
	CBuilder *pBuilder1 = new CConcreateBuilder1;
	CDirector *pDirector = new CDirector(pBuilder1);
	pDirector->Construct();
	
	CBuilder *pBuilder2 = new CConcreateBuilder2;
	pDirector = new CDirector(pBuilder2);
	pDirector->Construct();
         
delete pDirector; return 0; }

 

要点: 在指挥类中定义一个CBuilder成员,定义带参构造,用以决定到底用的是哪个CConcreateBuilser。

小结:建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式使用的模式。

 

 

posted on 2013-04-20 21:15  Riordon  阅读(113)  评论(0)    收藏  举报