建造者模式(builder)

1.目的

   当一个对象的结构比较复杂的时候(如组合),需要多个部分分别生成时,可以考虑使用建造者模式,builder提供构造各个成员部分的函数,然后由director来调builder的接口来完成对象的拼接(也可以由客户来实现对象的拼接,但是如果由director来调就可以对客户屏蔽builder的多个接口,屏蔽对象的生成过程)。对客户屏蔽对象的生成过程,可以说是建造者模式的主要目的


2.代码

builder.h

#ifndef BUILDER_H_
#define BUILDER_H_
#include <iostream>
using namespace std;

class PersonBuilder
{
public:
	virtual ~PersonBuilder()
	{}
	virtual void buildHead()=0;
	virtual void buildBody()=0;
	virtual void buildArm()=0;
	virtual void buildLeg()=0;

	void show()
	{
		cout<<"head = "<<head<<" body = "<<body<<" leg = "<<leg<<" arm = "<<arm<<endl;
	}
protected:
	int head;
	int body;
	int arm;
	int leg;
};

class FatBuilder:public PersonBuilder
{
public:
	void buildHead()
	{
		head = 10;
	}

	void buildBody()
	{
		body = 20;
	}

	void buildArm()
	{
		arm = 3;
	}

	void buildLeg()
	{
		leg = 8;
	}

};

class ThinBuilder:public PersonBuilder
{
public:
	void buildHead()
	{
		head = 5;
	}

	void buildBody()
	{
		body = 15;
	}

	void buildArm()
	{
		arm = 2;
	}

	void buildLeg()
	{
		leg = 5;
	}
};


class Director
{
public:
	void setBuilder(PersonBuilder& builder)
	{
		this->builder = &builder;
	}

	void builderPerson()
	{
		builder->buildHead();
		builder->buildBody();
		builder->buildArm();
		builder->buildLeg();
	};

private:
	PersonBuilder* builder;
};





#endif /* BUILDER_H_ */

builder.cpp

#include "Builder.h"

void builder()
{
	FatBuilder fat;
	ThinBuilder thin;

	Director director;

	director.setBuilder(fat);
	director.builderPerson();
	fat.show();

	director.setBuilder(thin);
	director.builderPerson();
	thin.show();


}

运行结果:

head = 10 body = 20 leg = 8 arm = 3
head = 5 body = 15 leg = 5 arm = 2


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值