好贷网好贷款

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

发布时间:2016-12-5 12:35:42 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C语言和设计模式(抽象工厂模式)",主要涉及到C语言和设计模式(抽象工厂模式)方面的内容,对于C语言和设计模式(抽象工厂模式)感兴趣的同学可以参考一下。

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】     前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。     假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买白苹果和白葡萄,另外一个水果店卖红苹果和红葡萄。所以说,对于水果店而言,尽管都在卖水果,但是两个店卖的品种不一样。       既然水果不一样,那我们先定义水果。 [cpp] view plaincopy typedef struct _Apple   {       void (*print_apple)();   }Apple;      typedef struct _Grape   {       void (*print_grape)();   }Grape;        上面分别对苹果和葡萄进行了抽象,当然它们的具体函数也是不一样的。 [cpp] view plaincopy void print_white_apple()   {       printf("white apple!\n");   }      void print_red_apple()   {       printf("red apple!\n");   }      void print_white_grape()   {       printf("white grape!\n");   }      void print_red_grape()   {       printf("red grape!\n");   }       完成了水果函数的定义。下面就该定义工厂了,和水果一样,我们也需要对工厂进行抽象处理。 [cpp] view plaincopy typedef struct _FruitShop   {       Apple* (*sell_apple)();       Apple* (*sell_grape)();   }FruitShop;       所以,对于卖白苹果、白葡萄的水果店就该这样设计了,红苹果、红葡萄的水果店亦是如此。 [cpp] view plaincopy Apple* sell_white_apple()   {       Apple* pApple = (Apple*) malloc(sizeof(Apple));       assert(NULL != pApple);          pApple->print_apple = print_white_apple;       return pApple;   }      Grape* sell_white_grape()   {       Grape* pGrape = (Grape*) malloc(sizeof(Grape));       assert(NULL != pGrape);          pGrape->print_grape = print_white_grape;       return pGrape;   }        这样,基本的框架就算搭建完成的,以后创建工厂的时候, [cpp] view plaincopy FruitShop* create_fruit_shop(int color)   {       FruitShop* pFruitShop = (FruitShop*) malloc(sizeof(FruitShop));       assert(NULL != pFruitShop);          if(WHITE == color)       {           pFruitShop->sell_apple = sell_white_apple;           pFruitShop->sell_grape = sell_white_grape;       }       else       {           pFruitShop->sell_apple = sell_red_apple;           pFruitShop->sell_grape = sell_red_grape;       }          return pFruitShop;   }  

上一篇:mono touch中app进入后台和被唤醒时的监听事件
下一篇:

相关文章

相关评论