构造者模式
源码 from: 万方数据 朱进 paper
构造者模式使用场景:
- 当生产的产品有复杂的内部构造
- 需要生产的产品的属性相互依赖,这些属性的赋值顺序比较重要。
#include <stdio.h>
#define BUIDE_C
#define FINISHED 1
#define UNFINISHED 0
typedef struct Splane plane;
typedef struct SconcreteBuild concrete_build;
/*function poniter*/
typedef int (*build_engine)(plane*);
typedef int (*build_airframe)(plane*);
typedef void (*construct)(concrete_build*);
/*plane struct*/
struct Splane{
int engine;
int airframe;
};
struct SconcreteBuild{
plane iplane;
build_engine ibuild_engine;
build_airframe ibuild_airframe;
};
typedef struct Sdirector{
concrete_build ibuild;
construct iconstruct;
}Director;
int mbuild_engine(plane *iplane){
iplane->engine = FINISHED;
printf("create engine\n"); //构建自己的算法
return iplane->engine;
}
int mbuild_airframe(plane *iplane){
iplane->airframe = FINISHED;
printf("create airframe\n"); // 构建自己的算法
return iplane->airframe;
}
/*assemble plane*/
void mconstruct(concrete_build *ibuild)
{
int part1 = UNFINISHED;
int part2 = UNFINISHED;
part1 = ibuild->ibuild_engine(&ibuild->iplane);
part2 = ibuild->ibuild_airframe(&ibuild->iplane);
if(part1 & part2)
printf("assemble success!\n");
}
static Director idirector = {
{ {UNFINISHED,UNFINISHED},
mbuild_engine,
mbuild_airframe},
mconstruct,
};
int main(int argc, char *argv[])
{
idirector.iconstruct(&idirector.ibuild);
return 0;
}
director用于组装部件,以形成成品
concrete_build 用于生产部件
结构体设计思想:
1. 首先定义飞机需要的部件 struct plane
2. 依据飞机的结构,构造各个部件
3. 依据各个部件构造完整的飞机