C语言和设计模式(简单工厂模式)

文章目录

一句话理解

一个工厂,根据输入类型不一样,产生不同类型的结果,factory中使用switch 或者if else来做区分。
缺点:每次增加一个新产品,需要对factor进行修改,之前对factory的测试要重新进行
优点:针对小型程序,设计比较简单、代码耦合度低

举例

 工厂模式是比较简单,也是比较好用的一种方式。根本上说,工厂模式的目的就根据不同的要求输出不同的产品。比如说吧,有一个生产鞋子的工厂,它能生产皮鞋,也能生产胶鞋。如果用代码设计,应该怎么做呢?

typedef struct _Shoe
{
    int type;
    void (*print_shoe)(struct _Shoe*);
}Shoe;

就像上面说的,现在有胶鞋,那也有皮鞋,我们该怎么做呢?

void print_leather_shoe(struct _Shoe* pShoe)
{
    assert(NULL != pShoe);
    printf("This is a leather show!\n");
}
 
void print_rubber_shoe(struct _Shoe* pShoe)
{
    assert(NULL != pShoe);
    printf("This is a rubber shoe!\n");
}

所以,对于一个工厂来说,创建什么样的鞋子,就看我们输入的参数是什么?至于结果,那都是一样的。

#define LEATHER_TYPE 0x01
#define RUBBER_TYPE  0x02
 
Shoe* manufacture_new_shoe(int type)
{
    assert(LEATHER_TYPE == type || RUBBER_TYPE == type);
 
    Shoe* pShoe = (Shoe*)malloc(sizeof(Shoe));
    assert(NULL != pShoe);
 
    memset(pShoe, 0, sizeof(Shoe));
    if(LEATHER_TYPE == type)
    {
        pShoe->type == LEATHER_TYPE;
        pShoe->print_shoe = print_leather_shoe;
    }
    else
    {
        pShoe->type == RUBBER_TYPE;
        pShoe->print_shoe = print_rubber_shoe;
    }
 
    return pShoe;
}
发布了297 篇原创文章 · 获赞 6 · 访问量 8484

猜你喜欢

转载自blog.csdn.net/qq_23929673/article/details/103550947
今日推荐