C语言和设计模式(抽象工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
来源:互联网 发布:淘宝客服售前操作流程 编辑:程序博客网 时间:2024/05/17 23:42
前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。 上面分别对苹果和葡萄进行了抽象,当然它们的具体函数也是不一样的。 完成了水果函数的定义。下面就该定义工厂了,和水果一样,我们也需要对工厂进行抽象处理。 所以,对于卖白苹果、白葡萄的水果店就该这样设计了,红苹果、红葡萄的水果店亦是如此。 这样,基本的框架就算搭建完成的,以后创建工厂的时候,
假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买白苹果和白葡萄,另外一个水果店卖红苹果和红葡萄。所以说,对于水果店而言,尽管都在卖水果,但是两个店卖的品种不一样。
既然水果不一样,那我们先定义水果。
- typedef struct _Apple
- {
- void (*print_apple)();
- }Apple;
- typedef struct _Grape
- {
- void (*print_grape)();
- }Grape;
- 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");
- }
- typedef struct _FruitShop
- {
- Apple* (*sell_apple)();
- Apple* (*sell_grape)();
- }FruitShop;
- 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;
- }
- 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;
- }
- C语言和设计模式(抽象工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(之原型模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(之组合模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(之模板模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(责任链模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(迭代器模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(外观模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(代理模式) .【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(享元模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(装饰模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(适配器模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(策略模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(中介者模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(建造者模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(桥接模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(观察者模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(备忘录模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- java 利用新浪天气API获取天气预报
- mac lion svnserver搭建 笔记
- .net 后台创建简单的表格
- HibernateSessionFactory (MyEclipse自动生成版)
- MySQL的备份与恢复
- C语言和设计模式(抽象工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- poj 2387 Til the Cows Come Home//最短路径
- Sed命令总汇
- C语言中字符串的\0和空格
- Linux Beyond Compare 3试用破解
- Oracle 游标使用全解
- 为什么c++不叫++c?
- LINUX RAC修改配置LOCK_SGA
- UISlider滑块控件的使用总结