设计模式之建造者模式

建造者模式是一种面向对象的设计模式,其核心思想是将复杂的对象构建过程与对象本身的表示分离。通过定义一个构建产品的抽象接口,并由具体的建造者类实现,实现了构建过程的灵活性。该模式中,Director类负责规定构建步骤,而Builder类则包含构建对象的各个部分。这种模式在需要组装多个组件以创建复杂对象的场景中特别有用。
摘要由CSDN通过智能技术生成

建造者模式

题外话:面向对象的一个重要指导思想就是,封装隔离变化的,留出不变的。

特点:一个对象的构建比较复杂,则将对象的构建对象的表示(要被创建的产品)进行分离。


角色:

Product:所要构建的复杂对象。

Builder:定义创建对象过程的抽象,提供构建不同组成部分的抽象接口。他和产品之间的关系是关联,即拥有一个产品属性的成员变量。

ConcreteBuilder:具体实现Builder中的各个构建子函数。不同的ConcreteBuilder可能有不同的实现方式。

Director:规定对象构建的业务逻辑,即构建步骤的顺序。这里Director聚合了Builder类的指针.


//构建房子:房子本身,工程队,设计师

class House{
public:
	void setDoor(string dor){
		door=dor;
	}
	void setWindow(string win){
		window=win;
	}
	void setWall(string wa){
		wall=wa;
	}
	string getDoor(){
		cout<<door<<endl;
		return door;
	}
	string getWall(){
		cout<<wall<<endl;
		return wall;
	}
	string getWindow(){
		cout<<window<<endl;
		return window;
	}
private:
	string door;
	string window;
	string wall;
};
class Builder{
public:
	virtual void makeDoor()=0;
	virtual void makeWindow()=0;
	virtual void makeWall()=0;
	virtual House* getHouse()=0;
};

class flatBuilder:public Builder{
public:
	flatBuilder(){
		m_hou=new House;
	}
	void makeDoor(){
		m_hou->setDoor("flat door");
	}
	void makeWindow(){
			m_hou->setWindow("flat window");
	}
	void makeWall(){
			m_hou->setWall("flat wall");
	}
	House* getHouse(){
		return m_hou;
	};

private:
House* m_hou;
};
class villaBuilder:public Builder{
public:
	villaBuilder(){
		m_hou=new House;
	}
	void makeDoor(){
		m_hou->setDoor("villa door");
	}
	void makeWindow(){
			m_hou->setWindow("villa window");
	}
	void makeWall(){
			m_hou->setWall("villa wall");
	}
	House* getHouse(){
		return m_hou;
	};

private:
House* m_hou;
};

class Designer{
public:
	Designer(Builder* bur):m_bur(bur){}
	void makeHouse(){
		m_bur->makeDoor();
		m_bur->makeWall();
		m_bur->makeWindow();
	}
private:
Builder* m_bur;
};

int main(){
	Builder* build=new villaBuilder;
	//Builder* build=new flatBuilder;
	Designer* des= new Designer(build);
	des->makeHouse();
	House* house=build->getHouse();
	house->getDoor();
	house->getWall();
	house->getWindow();
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值