介绍:
抽象工厂模式是一种创建型设计模式;
作用:
提供统一的接口让用户根据不同的需求创建出不同的工厂;
类比:
一个制造家具的工厂,可以根据用户不同的诉求,制造出不同风格的家具;
代码示例:
首先定义出不同类型的家具以供生产:
void modern_chair(void)
{
printf("A modern chairrn");
}
void modern_dest(void)
{
printf("A modern deskrn");
}
void victorian_chair(void)
{
printf("A victorian chairrn");
}
void victorian_dest(void)
{
printf("A victorian deskrn");
}
其次定义出工厂要制作的家具:
typedef struct
{
void (*chair)(void);
}Chair_t;
typedef struct
{
void (*desk)(void);
}Desk_t;
设计出工厂的具体生产内容:
Chair_t* make_modern_chair(void)
{
Chair_t* pChair = (Chair_t)malloc(sizeof(Chair_t));
assert(pChair != NULL);
pChair->chair = modern_chair;
return pChair;
}
Chair_t* make_victorian_chair(void)
{
Chair_t* pChair = (Chair_t)malloc(sizeof(Chair_t));
assert(pChair != NULL);
pChair->chair = victorian_chair;
return pChair;
}
Desk_t* make_modern_desk(void)
{
Desk_t* pDesk = (Dest_t)malloc(sizeof(Dest_t));
assert(pDesk != NULL);
pDesk->desk = modern_desk;
return pDesk;
}
Desk_t* make_victorian_desk(void)
{
Desk_t* pDesk = (Dest_t)malloc(sizeof(Dest_t));
assert(pDesk != NULL);
pDesk->desk = victorian_desk;
return pDesk;
}
接下来将工厂定义出来:
typedef struct
{
Chair_t (*make_chair)(void);
Dest_t (*make_desk)(void);
}Furniture_factory;
创建工厂:
Furniture_factory* Creat_furniture_factory(char* type)
{
Furniture_factory* pFurniture_factory = (Furniture_factory*)malloc(sizeof(Furniture_factory));
assert(pFurniture_factory != NULL)
if(memcmp(type, "modern") == 0)
{
pFurniture_factory->make_chair = make_modern_chair;
pFurniture_factory->make_desk = make_modern_desk;
}
else if(memcmp(type, "victorian") == 0)
{
pFurniture_factory->make_chair = make_victorian_chair;
pFurniture_factory->make_desk = make_victorian_desk;
}
else
{
printf("type is invalidrn");
}
}



