当前位置:编程学习 > JAVA >>

设计模式学习-----建造者模式(生成器模式)

建造者模式(生成器模式)

GOOD:在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用。

 11

 示例1:

#include <string>
#include <iostream>
#include <vector>
using namespace std;

//最终的产品类
class Product
{
private:
 vector<string> m_product;
public:
 void Add(string strtemp)
 {
  m_product.push_back(strtemp);
 }
 void Show()
 {
  vector<string>::iterator p=m_product.begin();
  while (p!=m_product.end())
  {
   cout<<*p<<endl;
   p++;
  }
 }
};

//建造者基类
class Builder
{
public:
 virtual void BuilderA()=0;
 virtual void BuilderB()=0;
 virtual Product* GetResult()=0;
};
//第一种建造方式
class ConcreteBuilder1 : public Builder
{
private:
 Product* m_product;
public:
 ConcreteBuilder1()
 {
  m_product=new Product();
 }
 virtual void BuilderA()
 {
  m_product->Add("one");
 }
 virtual void BuilderB()
 {
  m_product->Add("two");
 }
 virtual Product* GetResult()
 {
  return m_product;
 }
};
//第二种建造方式
class ConcreteBuilder2 : public Builder
{
private:
 Product * m_product;
public:
 ConcreteBuilder2()
 {
  m_product=new Product();
 }
 virtual void BuilderA()
 {
  m_product->Add("A");
 }
 virtual void BuilderB()
 {
  m_product->Add("B");
 }
 virtual Product* GetResult()
 {
  return m_product;
 }
};

//指挥者类
class Direct
{
public:
 void Construct(Builder* temp)
 {
  temp->BuilderA();
  temp->BuilderB();
 }
};

//客户端
int main()
{
 Direct *p=new Direct();
 Builder* b1=new ConcreteBuilder1();
 Builder* b2=new ConcreteBuilder2();

 p->Construct(b1);    //调用第一种方式
 Product* pb1=b1->GetResult();
 pb1->Show();

 p->Construct(b2);    //调用第二种方式
 Product * pb2=b2->GetResult();
 pb2->Show();
 return 0;
}
示例2:

#include <string>
#include <iostream>
#include <vector>
using namespace std;

class Person
{
public:
 virtual void CreateHead()=0;
 virtual void CreateHand()=0;
 virtual void CreateBody()=0;
 virtual void CreateFoot()=0;
};
class ThinPerson : public Person
{
public:
 virtual void CreateHead()
 {
  cout<<"thin head"<<endl;
 }
 virtual void CreateHand()
 {
  cout<<"thin hand"<<endl;
 }
 virtual void CreateBody()
 {
  cout<<"thin body"<<endl;
 }
 virtual void CreateFoot()
 {
  cout<<"thin foot"<<endl;
 }
};

class ThickPerson : public Person
{
public:
 virtual void CreateHead()
 {
  cout<<"ThickPerson head"<<endl;
 }
 virtual void CreateHand()
 {
  cout<<"ThickPerson hand"<<endl;
 }
 virtual void CreateBody()
 {
  cout<<"ThickPerson body"<<endl;
 }
 virtual void CreateFoot()
 {
  cout<<"ThickPerson foot"<<endl;
 }
};
//指挥者类
class Direct
{
private:
 Person* p;
public:
 Direct(Person* temp) { p = temp;}
 void Create()
 {
  p->CreateHead();
  p->CreateBody();
  p->CreateHand();
  p->CreateFoot();
 }
};

//客户端代码:
int main()
{
 Person *p=new ThickPerson();
 Direct *d= new Direct(p);
 d->Create();
 delete d;
 delete p;
 return 0;
}

 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,