栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计模式之抽象工厂模式(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式之抽象工厂模式(C语言)

介绍:

​ 抽象工厂模式是一种创建型设计模式;


作用:

​ 提供统一的接口让用户根据不同的需求创建出不同的工厂;


类比:

​ 一个制造家具的工厂,可以根据用户不同的诉求,制造出不同风格的家具;


代码示例:

首先定义出不同类型的家具以供生产:

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");
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号