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

阿里图标库谁做的网站公司搬家

阿里图标库谁做的网站,公司搬家,获奖网页设计,中装建设千股千评抽象工厂模式仍然属于创建型模式#xff0c;我们在【简单工厂和工厂方法模式】这篇文章中#xff0c;描述了简单工厂和工厂方法模式#xff0c;并在文末#xff0c;简单介绍了工厂方法模式的局限性。 本文将通过汽车工厂的例子继续来阐述使用抽象工厂模式相比较于工厂方法…抽象工厂模式仍然属于创建型模式我们在【简单工厂和工厂方法模式】这篇文章中描述了简单工厂和工厂方法模式并在文末简单介绍了工厂方法模式的局限性。 本文将通过汽车工厂的例子继续来阐述使用抽象工厂模式相比较于工厂方法模式的优势。 文章目录 工厂方法模式回顾抽象工厂模式代码使用抽象工厂的局限性 工厂方法模式回顾 工厂方法模式通过允许类将实例化延迟到子类中来实现使得增加新的产品类不需要修改现有系统的代码。例如一个汽车制造商需要不同类型的汽车如宝马、奥迪等每种汽车的制造过程可能不同 #include iostream #include string #include memory using namespace std;class Car { public:Car(string name) : name_(name) { }virtual ~Car(){}virtual void show() 0; protected:string name_; };class Bmw : public Car { public:Bmw(string name) : Car(name) { }void show() { cout 获得一辆宝马汽车 name_ endl; } };class Audi : public Car { public:Audi(string name) : Car(name) { }void show() { cout 获得一辆奥迪汽车 name_ endl; } };//工厂方法 class Factory { public:virtual ~Factory() {}virtual Car* createCar(string name) 0; //工厂方法 };//宝马工厂 class BMWFactory : public Factory { public:Car* createCar(string name) { return new Bmw(name); } }; //奥迪工厂 class AudiFactory : public Factory { public:Car* createCar(string name) { return new Audi(name); } };int main () {unique_ptrFactory bmwFactory(new BMWFactory());unique_ptrFactory audiFactory(new AudiFactory());unique_ptrCar p1(bmwFactory-createCar(X6));unique_ptrCar p2(audiFactory-createCar(A8));p1-show();p2-show();return 0; }现在我们考虑这样一种情况如果我们现在要生产的产品是一组有关联的产品簇怎么办难道我们像工厂方法一样又新建立一个工厂来生产该产品吗 比如说我们之前有了奥迪工厂和宝马工厂现在我们需要生产奥迪车灯和宝马车灯难道又建立奥迪车灯工厂吗 这样的话最后我们需要管理的工厂类那也太多了所以很容易想到 我们应该对一组有关联关系的产品簇提供产品对象的统一创建。这就是抽象工厂模式。 抽象工厂模式 我们把之前的工厂方法类写成抽象工厂类并且里面提供创建车灯的方法 并且我们直接在宝马工厂和奥迪工厂去创建车灯 //系列产品一:汽车 class Car { public:Car(string name) : name_(name) { }virtual ~Car(){}virtual void show() 0; protected:string name_; }; class Bmw : public Car { public:Bmw(string name) : Car(name) { }void show() { cout 获得一辆宝马汽车 name_ endl; } }; class Audi : public Car { public:Audi(string name) : Car(name) { }void show() { cout 获得一辆奥迪汽车 name_ endl; } }; //系列产品二车灯 class Light { public:virtual ~Light() {}virtual void show() 0; }; class BmwLight : public Light{ public:void show() { cout BMW light! endl;}; }; class AudiLight : public Light{ public:void show() { cout Audi light! endl;}; };//工厂方法 》 抽象工厂对一组有关联关系的产品簇提供产品对象的统一创建 class AbstractFactory { public:virtual ~AbstractFactory() {}virtual Car* createCar(string name) 0; //工厂方法 创建汽车virtual Light* createLight() 0; // 工厂方法 创建汽车关联的产品--车灯 };//宝马工厂 class BMWFactory : public AbstractFactory { public:Car* createCar(string name) { return new Bmw(name); }Light* createLight() {return new BmwLight();} }; //奥迪工厂 class AudiFactory : public AbstractFactory { public:Car* createCar(string name) { return new Audi(name); }Light* createLight() {return new AudiLight();} };代码使用 int main () {unique_ptrAbstractFactory bmwFactory(new BMWFactory());unique_ptrAbstractFactory audiFactory(new AudiFactory());unique_ptrCar p1(bmwFactory-createCar(X6));unique_ptrCar p2(audiFactory-createCar(A8));unique_ptrLight l1(bmwFactory-createCarLight());unique_ptrLight l2(audiFactory-createCarLight());p1-show();l1-show();p2-show();l2-show();return 0; }抽象工厂的局限性 我们设想这样一种场景比如说我们的宝马工厂需要创建一个新的类对象产品但是奥迪工厂并不需要但是如果宝马工厂想要创建该类 我们也比赛在抽象工厂类中去定义这样一个虚函数尽管奥迪工厂并不需要创建该类对象他还是不得不去重写该虚函数。这样是不符合逻辑的。 总结 简单工厂Simple Factory: 优点把对象的创建封装在一个接口函数里面通过传入不同的标识返回创建的对象用户不用自己负责new对象不用了解对象创建的详细过程 缺点提供创建对象实例的接口函数不闭合不能对修改关闭 工厂方法Factory Method 优点Fatcory基类提供了一个纯虚函数创建产品定义派生类具体产品的工厂负责创建对应的产品可以做到不同的产品在不同的工厂里面创建能够对现有工厂以及产品的修改关闭 缺点实际上很多产品是有管理关系的属于一个产品簇不应该放在不同的工厂里面去创建这样一是不符合实际的产品对象创建逻辑二是工厂类太多了不好维护 抽象工厂Abstract Factory 优点把有关联关系的属于一个产品簇的所有产品创建的接口函数放在一个抽象工厂里面AbstractFactory类派生类具体产品的工厂应该负责创建该产品簇里面所有的产品。
http://www.hkea.cn/news/14511931/

相关文章:

  • 阳江网站网站建设中企控股集团
  • 网站多多郴州网站建设费用价格
  • 禅城网站建设联系电话有什么专业做蛋糕的网站吗
  • 无锡网站制作怎么样重庆是哪个省哪个市
  • 建设网站英文翻译wordpress 手机端优化
  • 成都网站建设联系方式云匠网官网
  • 蓝色大气网站源码网站建设业务员沟通需求
  • 山西手机网站建设百度榜单
  • dw做网站简单首页批量刷wordpress评论
  • 郑州最好的网站建设wordpress英文变中文
  • 注册企业的步骤顺德网站优化公司
  • 珠海网站建设小小网络阿里百川 网站开发
  • 百度网站申诉网站 左右浮动 广告
  • 网站怎么企业备案信息中国最好的建筑设计公司
  • 网页源代码修改了影响别人吗广州百度seo代理
  • 网站的推广等内容常州百度网站排名优化
  • 企业网站栏目设置网站建设 目标
  • 网站开发的软件环境有哪些哪里找做网站客户
  • 湖北专业的网瘾戒除学校收费标准长沙快速排名优化
  • 建设银行北京招聘网站网站开发最流行的语言
  • 建设网站需要多少钱济南兴田德润o厉害吗网络设计的三个层次
  • 赣州网站建设怎么样中国建筑网建设通查询证件网
  • 做游戏还是做网站好机器配件做外贸上什么网站
  • 做网站后台开发工资我要做自媒体要怎么开始
  • seo网站排名全选湖南网站建设推荐
  • 网站做联盟广告能赚钱吗朝阳公司做网站
  • 农业特色网站建设一级a做爰片免费的网站有吗
  • 海南第六建设工程有限公司网站怎么开发一个网页
  • 西宁网站设计公司价格设计网站意味着什么
  • 上海网站建设专业公司哪家好兰溪企业网站搭建地址