大话设计模式建造者模式c++实现

建造者模式

其他二十三种设计模式

#include<iostream>
#include<list>

using namespace std;
//建造者模式
//产品类
class Product {
    
    
public:
	void Add(string _parts) {
    
    
		parts->push_back(_parts);
	}
	void Show() {
    
    
		cout << "产品创建: ";
		for (list<string>::iterator it = parts->begin(); it != parts->end(); it++) {
    
    
			cout << (*it) << " ";
		}
		cout << endl;
	}

private:
	list<string>* parts = new list<string>;
};

//抽象建造类
class Builder {
    
    
public:
	//建造产品所需物品
	virtual void BuilderPart1() = 0;
	virtual void BuilderPart2() = 0;
	//成品
	virtual Product* GetResult() = 0;
};

//具体建造类
class ConcreteBulider1 :public Builder {
    
    
public:
	virtual void BuilderPart1() {
    
    
		product->Add("部件A");
	}
	virtual void BuilderPart2() {
    
    
		product->Add("部件B");
	}
	virtual Product* GetResult() {
    
    
		return product;
	}

private:
	Product* product = new Product;
};

class ConcreteBulider2 :public Builder {
    
    
public:
	virtual void BuilderPart1() {
    
    
		product->Add("部件X");
	}
	virtual void BuilderPart2() {
    
    
		product->Add("部件Y");
	}
	virtual Product* GetResult() {
    
    
		return product;
	}

private:
	Product* product = new Product;
};

//指挥者类
class Director {
    
    
public:
	void Construct(Builder* _builder) {
    
    
		_builder->BuilderPart1();
		_builder->BuilderPart2();
	}
};

void test1() {
    
    
	//请一个设计者
	Director* diractor = new Director;
	//具体的建造者
	Builder* b1 = new ConcreteBulider1;  
	Builder* b2 = new ConcreteBulider2;

	//设计者指挥建造者生产
	diractor->Construct(b1);
	Product* p1 = b1->GetResult();
	p1->Show();

	diractor->Construct(b2);
	Product* p2 = b2->GetResult();
	p2->Show();

	delete b2;
	delete b1;
	delete diractor;
}
int main() {
    
    
	test1();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wode_0828/article/details/114143936