标题:
设计模式----简单工厂模式----C实例
[打印本页]
作者:
liuda
时间:
2015-1-23 18:55
标题:
设计模式----简单工厂模式----C实例
#include "stdlib.h"
//父类
typedef struct _milk milk;
typedef int (*creat_milk_tea)(milk *milk);
struct _milk
{
char *milk_tea_type;
int (* creat_milk_tea)(struct _milk *milk);
};
//产品类-----pearl-milk-tea
struct pearl_milk
{
struct _milk milk;
int (*delete_pearl_milk)(struct pearl_milk *pearl_milk);
int (*creat_pearl_milk)(struct pearl_milk *pearl_milk);
};
int delete_milk_pearl(struct pearl_milk *pearl_milk)
{
free(pearl_milk);
return 0;
}
int creat_milk_pearl_tea(struct pearl_milk *pearl_milk)
{
printf("Hi, preal milk is ready!\n");
return 0;
}
struct pearl_milk *creat_pearl_milk(void)
{
struct pearl_milk *pearl_milk = NULL;
pearl_milk = malloc(sizeof(struct pearl_milk));
if(NULL == pearl_milk)return NULL;
pearl_milk->delete_pearl_milk = delete_milk_pearl;
pearl_milk->creat_pearl_milk = creat_milk_pearl_tea;
pearl_milk->milk.creat_milk_tea = (creat_milk_tea)pearl_milk->creat_pearl_milk;
return pearl_milk;
}
//工厂类
struct factory
{
int (*delete_factory)(struct factory *fac);
struct factory *(*creat_factory)(char *milk_tea_type);
};
int delete_milk_factory(struct factory *fac)
{
free(fac);
return 0;
}
milk *creat_milk_factory(char *type)
{
milk *milk = NULL;
if(0 == strcmp("pearl", type))
{
milk = creat_pearl_milk();
}
else
{
printf("Sorry! no %s milk tea\n", type);
}
return milk;
}
struct factory *creak_factory(void)
{
struct factory *fac = malloc(sizeof(struct factory));
if(NULL == fac)return NULL;
fac->delete_factory = delete_milk_factory;
fac->creat_factory = creat_milk_factory;
return fac;
}
int main(int agrc, char *argv[])
{
struct factory *fac = NULL;
milk *sale_milk = NULL;
fac = creak_factory();
if(NULL == fac)return 1;
sale_milk = fac->creat_factory(argv[1]);
if(NULL == sale_milk)return 1;
sale_milk->creat_milk_tea(sale_milk);
fac->delete_factory(fac);
free(sale_milk);
return 0;
}
作者:
liuda
时间:
2015-1-23 18:55
近期会有一系列的关于设计模式的笔记出来.
http://dong.hongjun888.blog.163. ... 084200892672212217/
很好的解释了简单工厂模式.简单来讲一个工厂类就是根据传入的参量使用相应的产品类,这里面的产品类是实现产品的实例,也可以理解为算法。
http://blog.csdn.net/sx_wpc/article/details/7645062
用C实现了简单工厂模式.
总之,简单工厂模式一般可由三部分组成:
1. 工厂类: 核心, 会依据客户端的需求来调用产品类来创建产品
2. 抽象类: 担任父类的角色, 也就说工厂所有的产品都有的属性
3. 产品类: 工厂各个产品的实例
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1