引言: 一个产品(如电脑)有几个必要的部件组成,如: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。
小结:建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式使用的模式。
    我喜欢一无所有,这样就只能一步一步的创造世界...
                    
                

                
            
        
浙公网安备 33010602011771号