当前位置: 首页 > news >正文

网站论坛建设百青藤广告联盟官网

网站论坛建设,百青藤广告联盟官网,服装私人订制网站,汕头建站价格工厂模式属于创建型模式#xff0c;大致可以分为三类#xff0c;简单工厂模式、工厂方法模式、抽象工厂模式。二. 工厂方法模式所谓工厂方法模式#xff0c;是指定义一个用于创建对象的接口#xff0c;让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子…工厂模式属于创建型模式大致可以分为三类简单工厂模式、工厂方法模式、抽象工厂模式。二. 工厂方法模式所谓工厂方法模式是指定义一个用于创建对象的接口让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。还以刚才的例子解释这家电子厂赚了不少钱于是决定再开设一个厂其中一个工厂专门用来生产A型号的产品也就是只生产电吹风而另一工厂专门用来生产B型号的产品也就是只生产电风扇这样分工明确了。以后客户要再下定单时可以直接找到相关的工厂了比如要A型号的产品就找A工厂要不再担心下的定单是A生产出来的是B产品了。代码实现abstractClass.h#ifndef ABSTRACTCLASS_H#define ABSTRACTCLASS_H#include #include typedef struct {size_t size;void* (*ctor)(void *_self, va_list *params);void* (*dtor)(void *_self);} AbstractClass;#endiffactory.h#ifndef FACTORY_H#define FACTORY_H#include #include typedef struct {size_t size;void* (*ctor)(void *_self, va_list *params);void* (*dtor)(void *_self);void* (*createProduct)(const void *_self);} Factory;#endiffactoryA.h#ifndef FACTORYA_H#define FACTORYA_Htypedef struct {const void *_;} _FactoryA;extern const void *FactoryA;#endiffactoryA.c#include factory.h#include factoryA.h#include productA.h#include new.h#include static void *factoryACtor(void *_self, va_list *params){_FactoryA *self _self;return self;}static void *factoryADtor(void *_self) {_FactoryA *self _self;return self;}static void* factoryACreateProduct(const void *self) {return New(ProductA);}static const Factory _factory {sizeof(_FactoryA),factoryACtor,factoryADtor,factoryACreateProduct};const void *FactoryA _factory;factoryB.h#ifndef FACTORYB_H#define FACTORYB_Htypedef struct {const void *_;} _FactoryB;extern const void *FactoryB;#endiffactoryB.c#include factory.h#include factoryB.h#include productB.h#include new.h#include static void *factoryBCtor(void *_self, va_list *params){_FactoryB *self _self;return self;}static void *factoryBDtor(void *_self) {_FactoryB *self _self;return self;}static void* factoryBCreateProduct(const void *self) {return New(ProductB);}static const Factory _factory {sizeof(_FactoryB),factoryBCtor,factoryBDtor,factoryBCreateProduct};const void *FactoryB _factory;product.h#ifndef PRODUCT_H#define PRODUCT_H#include #include typedef struct {size_t size;void* (*ctor)(void *_self, va_list *params);void* (*dtor)(void *_self);void (*show)(const void *_self);} Product;#endifproductA.h#ifndef PRODUCTA_H#define PRODUCTA_Htypedef struct {const void *_;} _ProductA;extern const void *ProductA;#endifproductA.c#include product.h#include productA.h#include #include static void *productACtor(void *_self, va_list *params) {_ProductA *self _self;return self;}static void *productADtor(void *_self) {_ProductA *self _self;return self;}static void productAShow(const void *_self) {(void)_self;fprintf(stdout, Product A\n);}static const Product _product {sizeof(_ProductA),productACtor,productADtor,productAShow};const void *ProductA _product;productB.h#ifndef PRODUCTB_H#define PRODUCTB_Htypedef struct {const void *_;} _ProductB;extern const void *ProductB;#endifproductB.c#include product.h#include productB.h#include #include #include static void *productBCtor(void *_self, va_list *params) {_ProductB *self _self;return self;}static void *productBDtor(void *_self) {_ProductB *self _self;return self;}static void productBShow(const void *_self) {(void)_self;fprintf(stdout, Product B\n);}static const Product _product {sizeof(_ProductB),productBCtor,productBDtor,productBShow};const void *ProductB _product;new.h#ifndef NEW_H#define NEW_Hvoid *New(const void *_class, ...);void Delete(void *_class);void *CreateProduct(const void *_factory);void Show(const void *product);#endifnew.c#include new.h#include abstractClass.h#include factory.h#include product.h#include #include #include #include void *New(const void *_class, ...) {const AbstractClass *class _class;void *p calloc(1, class-size);assert(p);*(const AbstractClass **)p class;if (class-ctor) {va_list params;va_start(params, _class);p class-ctor(p, ¶ms);va_end(params);}return p;}void Delete(void *_class) {const AbstractClass **class _class;if (_class *class (*class)-dtor) {_class (*class)-dtor(_class);}free(_class);}void *CreateProduct(const void *_factory) {const Factory * const *factory _factory;if (_factory *factory (*factory)-createProduct) {return (*factory)-createProduct(_factory);} else {return NULL;}}void Show(const void *_product) {const Product * const *product _product;if (_product *product (*product)-show) {(*product)-show(_product);}}main.c#include new.h#include factoryA.h#include factoryB.hint main(int argc, char *argv[]) {void *facA New(FactoryA);void *facB New(FactoryB);void *pro1 CreateProduct(facA);void *pro2 CreateProduct(facB);void *pro3 CreateProduct(facA);Show(pro1);Show(pro2);Show(pro3);Delete(facA);Delete(facB);Delete(pro1);Delete(pro2);Delete(pro3);return 0;}图片来源http://blog.csdn.net/hmsiwtv/article/details/9627109
http://www.sadfv.cn/news/229159/

相关文章:

  • 网站开发翻译站长之家域名查询
  • 很有风格的网站有哪些二百块做网站
  • 网站建设大型企业跨境电商一件代发货源平台
  • 微网站下载资料怎么做亳州公司做网站
  • 响应式网站例子wordpress使用json
  • seo网站推广的主要目的是什么如何做电影下载网站
  • 网站图片素材下载全屏网站设计技巧
  • 电子商务网站建设主管的策划书南通网站关键字优化
  • 东莞企业网站设计公司淘宝客如何建立自己的网站
  • 怎么用ps做网站首页背景图片本周新闻热点
  • 淮南微信网站建设河北网络推广平台
  • 建设银行网站怎么短信转账东莞seo排名收费
  • 单位网站建设方案网站的页脚什么做
  • 网站建设公司盈利青岛网站建设模板下载
  • 手机网站建设专家查询企业邮箱
  • 广州网站优化流程如何做网站
  • 郑州旅游网站设计网络营销整合营销
  • 网站运营公司哪家效果好网站降权怎么救
  • 专注网站建设微信开发北京大学两学一做网站
  • 网站做分站北京城建亚泰建设集团有限公司网站
  • 网络营销的定义及其内容是什么百度爱采购关键词优化
  • 网站建设企业建站哪家好?来这里看看免费的素材库视频无水印
  • 慈溪网站优化创建网站首页
  • 关于进一步加强网站建设和做h5免费软件有哪些
  • apache 搭建多个网站食品包装设计的相关介绍
  • 北京当地网站 点广州网站制作(信科网络)
  • 服务器网站建设流程wordpress ajax 提交表单
  • 海南旅游网站的建设理念wordpress托管服务器
  • 大庆市建设网站wordpress仿微信音乐插件
  • 北京网站seo收费标准竞价推广外包托管