23种设计模式C++实例之创建者模式

本文深入探讨了建造者模式在房屋构造过程中的应用,通过实例展示了如何将房屋的不同部分(如地板、墙壁、门)分别构建,并最终组合成完整的房屋对象。同时,介绍了如何通过客户端调用来构建不同类型的房屋(如公寓和别墅),并展示构建过程的灵活性和高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 建造者模式:将一个复杂的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。
  • 主要角色:
    • 抽象建造者
    • 具体建造者
    • 产品
    • 指导者
// 把建造不同类型房子的过程与客户端调用分类

#include <iostream>

using namespace std;

/*
 * 建造者模式
 * 对象的创建和对象的表示分离
 * */

class House {
public:
	void setFloor(string floor) {
		m_floor = floor;
	}
	void setWall(string wall) {
		m_wall = wall;
	}
	void setDoor(string door) {
		m_door = door;
	}
	void show() {
		cout << m_floor << endl;
		cout << m_wall << endl;
		cout << m_door << endl;
	}
private:
	string m_floor;
	string m_wall;
	string m_door;
};

class Builder {
public:
	virtual ~Builder() {}
	virtual void makeFloor() = 0;
	virtual void makeWall() = 0;
	virtual void makeDoor() = 0;
	virtual House* getHouse() = 0;
};

class FlatBuilder : public Builder {
public:
	FlatBuilder() {
		m_house = new House();
	}
	virtual ~FlatBuilder() {
		if (m_house != NULL) {
			delete m_house;
			m_house = NULL;
		}
	}
	void makeFloor() {
		m_house->setFloor("flat floor");
	}

	void makeWall() {
		m_house->setWall("flat wall");
	}

	void makeDoor() {
		m_house->setDoor("flat door");
	}

	House* getHouse() {
		return m_house;
	}
private:
	House* m_house;
};

class VillaBuilder : public Builder {
public:
	VillaBuilder() {
		m_house = new House();
	}
	virtual ~VillaBuilder() {
		if (m_house != NULL) {
			delete m_house;
			m_house = NULL;
		}
	}
	void makeFloor() {
		m_house->setFloor("villa floor");
	}

	void makeWall() {
		m_house->setWall("villa wall");
	}

	void makeDoor() {
		m_house->setDoor("villa door");
	}

	House* getHouse() {
		return m_house;
	}
private:
	House* m_house;
};

class Director {
public:
	void setBuilder(Builder* builder) {
		m_builder = builder;
	}

	House* construct() {
		m_builder->makeFloor();
		m_builder->makeWall();
		m_builder->makeDoor();
		return m_builder->getHouse();
	}
private:
	Builder* m_builder;
};

int main() {
	Director* director = new Director;

	Builder* builder = NULL;
	House* house = NULL;

	builder = new VillaBuilder;
	director->setBuilder(builder);
	director->construct();
	house = builder->getHouse();
	house->show();

	delete builder;

	builder = new FlatBuilder;
	director->setBuilder(builder);
	director->construct();
	house = builder->getHouse();
	house->show();

	delete builder;

	delete director;

	return 0;
}

设计原则

创建模式(5种)

结构模式(7种)

行为模式(11种)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值