找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2170|回复: 1
打印 上一主题 下一主题
收起左侧

设计模式----简单工厂模式----C实例

[复制链接]
跳转到指定楼层
楼主
ID:72519 发表于 2015-1-23 18:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72519 发表于 2015-1-23 18:55 | 只看该作者
近期会有一系列的关于设计模式的笔记出来.

http://dong.hongjun888.blog.163. ... 084200892672212217/很好的解释了简单工厂模式.简单来讲一个工厂类就是根据传入的参量使用相应的产品类,这里面的产品类是实现产品的实例,也可以理解为算法。

http://blog.csdn.net/sx_wpc/article/details/7645062用C实现了简单工厂模式.


总之,简单工厂模式一般可由三部分组成:

1. 工厂类: 核心, 会依据客户端的需求来调用产品类来创建产品

2. 抽象类: 担任父类的角色, 也就说工厂所有的产品都有的属性

3. 产品类: 工厂各个产品的实例
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表