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

哈尔滨网站制作方案扬中网站推广

哈尔滨网站制作方案,扬中网站推广,麻章网站开发公司,江西网站建设价格低解释说明#xff1a;提供一个创建一系列相关或相互依赖对象的接口#xff0c;而无需指定他们具体的类。 简言之#xff0c;一个工厂可以提供创建多种相关产品的接口#xff0c;而无需像工厂方法一样#xff0c;为每一个产品都提供一个具体工厂 抽象工厂#xff08;Abstra… 解释说明提供一个创建一系列相关或相互依赖对象的接口而无需指定他们具体的类。 简言之一个工厂可以提供创建多种相关产品的接口而无需像工厂方法一样为每一个产品都提供一个具体工厂 抽象工厂AbstractFactory提供了创建抽象的接口它包含了多个创建产品的方法可以创建多个不同等级的产品 具体工厂ConcreteFactory主要是实现抽象工厂中的多个抽象方法完成具体产品的创建 抽象产品Product定义产品的规范描述了产品的主要特性和功能抽象工厂模式有多个抽象产品 具体产品ConcreteProduct实现了抽象产品角色所定义的接口由具体工厂来创建它同具体工厂之间是一对一的关系 优点 封装了产品的创建使得不需要知道具体是哪种产品只需要知道是哪个工厂即可。 可以支持不同类型的产品使得模式灵活性更强。 可以非常方便的使用一族中的不同类型的产品。 缺点 结构过于臃肿如果产品类型较多或产品族较多会非常难于管理。 每次如果添加一组产品那么所有的工厂类都必须添加一个方法这样违背了开放-封闭原则。所以一般适用于产品组合产品族变化不大的情况。 适用场景 在不必指定产品的具体的情况下创建多个产品族中的产品对象。 考虑这样一个场景如下图 Jungle想要进行户外运动它可以选择打篮球和踢足球。但这次Jungle不想弄脏原本穿的T恤所以Jungle还需要穿球衣打篮球就穿篮球衣踢足球就穿足球衣。篮球保管室可以提供篮球和篮球衣足球保管室可以提供足球和足球衣。Jungle只要根据心情去某个保管室就可以换上球衣、拿上球然后就可以愉快地玩耍了 对应的UML实例图如下图 #pragma once #include string using namespace std; // 汽车接口 class ICar { public:virtual string Name() 0; // 汽车名称 }; /********** 汽车 **********/ // 奔驰 class BenzCar : public ICar { public:string Name() {return Benz Car;} }; // 宝马 class BmwCar : public ICar { public:string Name() {return Bmw Car;} }; // 奥迪 class AudiCar : public ICar { public:std::string Name() {return Audi Car;} }; // 自行车接口 class IBike { public:virtual string Name() 0; // 自行车名称 }; /********** 自行车 **********/ // 奔驰 class BenzBike : public IBike { public:string Name() {return Benz Bike;} }; // 宝马 class BmwBike : public IBike { public:string Name() {return Bmw Bike;} }; // 奥迪 class AudiBike : public IBike { public:string Name() {return Audi Bike;} };#include product.h // 抽象工厂 class AFactory { public:enum FACTORY_TYPE {BENZ_FACTORY, // 奔驰工厂BMW_FACTORY, // 宝马工厂AUDI_FACTORY // 奥迪工厂};virtual ICar* CreateCar() 0; // 生产汽车virtual IBike* CreateBike() 0; // 生产自行车static AFactory* CreateFactory(FACTORY_TYPE factory); // 创建工厂 };#include factory.h #include product.h // 奔驰工厂 class BenzFactory : public AFactory { public:ICar* CreateCar() {return new BenzCar();}IBike* CreateBike() {return new BenzBike();} }; // 宝马工厂 class BmwFactory : public AFactory { public:ICar* CreateCar() {return new BmwCar();}IBike* CreateBike() {return new BmwBike();} }; // 奥迪工厂 class AudiFactory : public AFactory { public:ICar* CreateCar() {return new AudiCar();}IBike* CreateBike() {return new AudiBike();} }; // 创建工厂 AFactory* AFactory::CreateFactory(FACTORY_TYPE factory) {AFactory* pFactory NULL;switch (factory) {case FACTORY_TYPE::BENZ_FACTORY: // 奔驰工厂pFactory new BenzFactory();break;case FACTORY_TYPE::BMW_FACTORY: // 宝马工厂pFactory new BmwFactory();break;case FACTORY_TYPE::AUDI_FACTORY: // 奥迪工厂pFactory new AudiFactory();break;default:break;}return pFactory; }#include factory.h #include product.h #include iostream using namespace std; #ifndef SAFE_DELETE #define SAFE_DELETE(p) { if(p){delete(p); (p)NULL;} } #endif int main() {// 奔驰AFactory* pFactory AFactory::CreateFactory(AFactory::FACTORY_TYPE::BENZ_FACTORY);ICar* pCar pFactory-CreateCar();IBike* pBike pFactory-CreateBike();cout Benz factory - Car: pCar-Name() endl;cout Benz factory - Bike: pBike-Name() endl;SAFE_DELETE(pCar);SAFE_DELETE(pBike);SAFE_DELETE(pFactory);// 宝马pFactory AFactory::CreateFactory(AFactory::FACTORY_TYPE::BMW_FACTORY);pCar pFactory-CreateCar();pBike pFactory-CreateBike();cout Bmw factory - Car: pCar-Name() endl;cout Bmw factory - Bike: pBike-Name() endl;SAFE_DELETE(pCar);SAFE_DELETE(pBike);SAFE_DELETE(pFactory);// 奥迪pFactory AFactory::CreateFactory(AFactory::FACTORY_TYPE::AUDI_FACTORY);pCar pFactory-CreateCar();pBike pFactory-CreateBike();cout Audi factory - Car: pCar-Name() endl;cout Audi factory - Bike: pBike-Name() endl;SAFE_DELETE(pCar);SAFE_DELETE(pBike);SAFE_DELETE(pFactory);getchar();return 0; }
http://www.dnsts.com.cn/news/167997.html

相关文章:

  • 在线简历免费制作网站电商数据
  • 户网站开发的小公司如何做一个个人做网站
  • 找最新游戏做视频网站湖南网站优化代运营
  • 在线网站代理浏览静态网站开发与实施的论文
  • 泸州市建设工程管理局网站网站软件下载安装
  • 广州外贸营销网站建设公司详情页设计方法
  • 长沙有哪些网站建设公司ss和wordpress
  • 宜昌做网站公司有哪些方法企业管理咨询顾问
  • 专业网站制作哪家专业私人私密浏览器免费下载
  • 产品发布网站的装饰怎么做青岛做优化网站哪家好
  • 手机网站和电脑网站一样吗金融 网站建设
  • 新网站seo优化国外网络推广
  • 烟台海阳市专业做网站邮箱qq登录入口
  • 卡地亚手表官方网站怎么做属于自己的免费网站
  • 请人用wordpress建站假期广告设计公司起名字
  • 网站建设品牌营销网站开发需要多少钱
  • 吉林北京网站建设移动端网站开发项目报告
  • 自助手机建站系统有服务器数据库怎么安装wordpress
  • 深圳网站设计(深圳信科)网络推广公司有多少家
  • 企业网站优化的方式网站怎样做才能有点击率
  • 杭州 seo网站建设 网络服务wordpress如何使用父导航可点击
  • 唐山哪里建设网站好公司销售管理系统
  • 网站服务器购买价格腾讯云搭建单窗口单ip
  • 公司建设网站的步骤搭建网站怎么挣钱
  • 千图网素材下载网站好友介绍网站怎么做
  • 直播网站的建设深圳福田建设局网站首页
  • 安徽网站关键字优化域名备案信息查询官网
  • 百元做网站白云网站建设
  • 婚庆公司网站建设得多少钱昆明网站
  • 微网站平台专业建站公司推荐