建造者模式(builder)

来源:互联网 发布:阿里金融云解决方案 编辑:程序博客网 时间:2024/05/15 14:11

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
原创粉丝点击