디자인 모드 - 생 성 모드 의 Builder (생 성기)

의도: 복잡 한 대상 의 구축 과 그 표 시 를 분리 하여 같은 구축 과정 에서 서로 다른 표 시 를 만 들 수 있 도록 합 니 다.
코드:
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Product  //          ,         
{
private:
	vector<string> Part;
public:
	void AddPartA(string PartName)
	{
		Part.push_back(PartName);
	}
   
	void AddPartB(string PartName)
	{
		Part.push_back(PartName);
	}

	void Show()
	{
		for( vector<string>::iterator i = Part.begin();i != Part.end(); i++)
		{
			cout << *i << "   ";
		}
		cout << "construct finished";
	}
};

class Builder  //   ,     Product             , Abstrct Factory  ,        
{
public:Product product;   
public:
	virtual void AddPart() = 0;
	virtual Product& Return() = 0;
};
	
class ConcretBuilder1:public Builder  //                    
{
public:
	void AddPart()
	{
		product.AddPartA(string("Product1PartA"));
		product.AddPartB(string("Product1PartB"));
	}

	Product& Return()
	{
		return this->product;
	}
};

class ConcretBuilder2:public Builder
{
public:
	void AddPart()
	{
		product.AddPartA(string("Product2PartA"));
		product.AddPartB(string("Product2PartB"));
	}

	Product& Return()
	{
		return this->product;
	}
};

class Director  //   ,      Builder     
{
public:
	Product& Construct(Builder* builder)
	{
		builder->AddPart();
		return builder->Return();
    }
};

int main()
{
	Director* director = new Director();
	Builder* builder1 = new ConcretBuilder2();
	Product product = director->Construct(builder1);
	product.Show();
	
	delete director;
	delete builder1;
	return 1;
}

효과:
1. 한 제품 의 내부 표 시 를 바 꿀 수 있 습 니 다.
2. 구조 코드 와 표시 코드 를 분리 시킨다.
3. 구조 과정 을 더욱 세밀 하 게 통제 할 수 있 게 한다.
관련 모드:
1. Abstract Factory 는 Builder 와 비슷 하 다. 그들 은 모두 공장 방법 을 사용 하여 복잡 한 대상 을 만 들 수 있다. 주로 Builder 는 한 걸음 한 걸음 복잡 한 대상 을 구성 하 는 데 중심 을 두 고 있 고 Abstract Factory 는 여러 시리즈 의 제품 대상 에 중심 을 두 고 있다.Builder 는 마지막 단계 에서 제품 을 되 돌려 주 고 Abstract Factory 제품 은 바로 돌아 갑 니 다.
2 Composite 는 보통 Builder 에서 생 성 됩 니 다.

좋은 웹페이지 즐겨찾기