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

仙游网站建设公司什么是核心关键词

仙游网站建设公司,什么是核心关键词,龙华网站(建设信科网络),成人在色线视频在线观看免费大全作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、抽象工厂模式是什么? 抽象工厂模式是一种创建型的软件设计模式,该模式相当于升级版的工厂模式。 如果…

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

一、抽象工厂模式是什么?

       抽象工厂模式是一种创建型的软件设计模式,该模式相当于升级版的工厂模式。

       如果说工厂模式对应一个产品系列,那抽象工厂就对应了多个产品系列。比如工厂模式中有鞋子、衣服和裤子可以生产,那抽象工厂模式就会衍生出耐克工厂和阿迪工厂,这两个工厂分别生产各自品牌的鞋子、衣服和裤子,客户只需要选择具体工厂和想要的产品即可。如果想要替换产品系列,也只需要将具体工厂切换为别的品牌就行了。

       抽象工厂模式的优点:

  1. 具体类分离。具体产品类在具体工厂的实现中进行了分离和归类。
  2. 易于更换产品族。当客户想要改变整个产品族时,只需要切换具体工厂即可。
  3. 利于产品一致性。当产品族的各个产品需要在一起执行时,抽象工厂可以确保客户只操作同系列产品,而不会进行跨品牌的组合。

      抽象工厂模式的缺点:

  1. 不利于添加新种类产品。每加一个新的种类,如多一个项链类型的产品,那每一个具体工厂都要进行代码的扩展,且破坏了原先规定的结构,违反了开闭原则。

二、抽象工厂模式

2.1 结构图

       客户端即Main主函数,选择具体工厂(族),通过该工厂产生该系列下的具体产品(苹果和香蕉),切换具体工厂,产生新系列的具体产品。

2.2 代码示例

       场景描述:我联系了一家中国工厂,品尝该厂的苹果和香蕉,吃完后又找到一家美国工厂,品尝他家的苹果和香蕉,对比下口感。

//Prodect.h
/****************************************************/
#pragma once
#include <iostream>using namespace std;// 抽象产品类
class Prodect
{
public:// 构造函数Prodect(int price) :m_price(price) {};// 析构函数virtual ~Prodect() {};// 获取价格int getPrice() {return m_price;}
protected:// 产品价格int m_price;
};// 抽象产品细分-苹果
class AppleProdect : public Prodect
{
public:// 构造函数AppleProdect(int price, string color) :Prodect(price), m_color(color) {};// 析构函数virtual ~AppleProdect() {};// 获取颜色string getColor() {return m_color;}
protected:// 颜色string m_color;
};// 抽象产品细分-香蕉
class BananaProdect : public Prodect
{
public:// 构造函数BananaProdect(int price) :Prodect(price) {};// 析构函数virtual ~BananaProdect() {};
};// 具体产品-中国苹果
class ChineseAppleProdect : public AppleProdect
{
public:// 构造函数ChineseAppleProdect(int price, string color) :AppleProdect(price, color) {cout << "获得了一个中国苹果。" << endl;};// 析构函数virtual ~ChineseAppleProdect() {cout << "吃掉了一个中国苹果。" << endl;};
};// 具体产品-美国苹果
class AmericanAppleProdect : public AppleProdect
{
public:// 构造函数AmericanAppleProdect(int price, string color) :AppleProdect(price, color) {cout << "获得了一个美国苹果。" << endl;};// 析构函数virtual ~AmericanAppleProdect() {cout << "吃掉了一个美国苹果。" << endl;};
};// 具体产品-中国香蕉
class ChineseBananaProdect : public BananaProdect
{
public:// 构造函数ChineseBananaProdect(int price) :BananaProdect(price) {cout << "获得了一个中国香蕉。" << endl;};// 析构函数virtual ~ChineseBananaProdect() {cout << "吃掉了一个中国香蕉。" << endl;};
};// 具体产品-美国香蕉
class AmericanBananaProdect : public BananaProdect
{
public:// 构造函数AmericanBananaProdect(int price) :BananaProdect(price) {cout << "获得了一个美国香蕉。" << endl;};// 析构函数virtual ~AmericanBananaProdect() {cout << "吃掉了一个美国香蕉。" << endl;};
};
//Factory.h
/****************************************************/
#pragma once
#include <iostream>
#include "Prodect.h"using namespace std;// 抽象工厂类
class Factory
{
public:// 获取苹果virtual Prodect* getApple() = 0;// 获取香蕉virtual Prodect* getBanana() = 0;
};// 具体工厂类-中国工厂
class ChineseFactory : public Factory
{
public:// 获取苹果virtual Prodect* getApple() {Prodect* prodect = new ChineseAppleProdect(5, "红");return prodect;}// 获取香蕉virtual Prodect* getBanana() {Prodect* prodect = new ChineseBananaProdect(3);return prodect;}
};// 具体工厂类-美国工厂
class AmericanFactory : public Factory
{
public:// 获取产品virtual Prodect* getApple() {Prodect* prodect = new AmericanAppleProdect(4, "黑");return prodect;}// 获取香蕉virtual Prodect* getBanana() {Prodect* prodect = new AmericanBananaProdect(2);return prodect;}
};
//main.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "Factory.h"
#include "Prodect.h"using namespace std;int main()
{cout << "找到中国工厂。" << endl;Factory* factoryA = new ChineseFactory();Prodect *A = factoryA->getApple();Prodect *B = factoryA->getBanana();int applePrice = A->getPrice();int bananaPrice = B->getPrice();int sum = A->getPrice() + B->getPrice();cout << "苹果价格:" << applePrice << "元。" << endl;cout << "香蕉价格:" << bananaPrice << "元。" << endl;cout << "累计消费:" << sum << "元。" << endl;cout << "中国苹果" << dynamic_cast<AppleProdect*>(A)->getColor() << "色" << endl;delete A;delete B;delete factoryA;cout << "享用完毕。" << endl << endl;cout << "找到美国工厂。" << endl;Factory* factoryB = new AmericanFactory();Prodect *C = factoryB->getApple();Prodect *D = factoryB->getBanana();applePrice = C->getPrice();bananaPrice = D->getPrice();sum = C->getPrice() + D->getPrice();cout << "苹果价格:" << applePrice << "元。" << endl;cout << "香蕉价格:" << bananaPrice << "元。" << endl;cout << "累计消费:" << sum << "元。" << endl;cout << "美国苹果" << dynamic_cast<AppleProdect*>(C)->getColor() << "色" << endl;delete C;delete D;delete factoryB;cout << "享用完毕。不如China。" << endl;return 0;
}

       程序结果如下。

        在上述示例中,我们可以看到,这两个工厂都有同样的系列产品(苹果和香蕉),我想体验新的系列产品,只需要更换具体工厂即可。

三、总结

       我尽可能用较通俗的话语和直观的代码例程,来表述我对抽象工厂模式的理解,或许有考虑不周到的地方,如果你有不同看法欢迎评论区交流!希望我举的例子能帮助你更好地理解抽象工厂模式。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!


文章转载自:
http://stark.jftL.cn
http://libeler.jftL.cn
http://scandia.jftL.cn
http://autolysis.jftL.cn
http://tellurous.jftL.cn
http://markswoman.jftL.cn
http://schizomycete.jftL.cn
http://luxurious.jftL.cn
http://nondirectional.jftL.cn
http://dithery.jftL.cn
http://altissimo.jftL.cn
http://etude.jftL.cn
http://calabazilla.jftL.cn
http://cholate.jftL.cn
http://untearable.jftL.cn
http://anchorite.jftL.cn
http://pseudomonas.jftL.cn
http://resultative.jftL.cn
http://sialoid.jftL.cn
http://apolitical.jftL.cn
http://breath.jftL.cn
http://postbellum.jftL.cn
http://capibara.jftL.cn
http://handwheel.jftL.cn
http://ostomy.jftL.cn
http://railroadiana.jftL.cn
http://loamless.jftL.cn
http://bridie.jftL.cn
http://emr.jftL.cn
http://alarmism.jftL.cn
http://tianjing.jftL.cn
http://charmingly.jftL.cn
http://whorly.jftL.cn
http://stickpin.jftL.cn
http://naxalite.jftL.cn
http://consortion.jftL.cn
http://minuend.jftL.cn
http://endostyle.jftL.cn
http://chestnut.jftL.cn
http://haemoglobinometry.jftL.cn
http://him.jftL.cn
http://refectory.jftL.cn
http://wintertide.jftL.cn
http://uprisen.jftL.cn
http://armourbearer.jftL.cn
http://whiggery.jftL.cn
http://wwf.jftL.cn
http://unfoiled.jftL.cn
http://gouge.jftL.cn
http://jagger.jftL.cn
http://preemployment.jftL.cn
http://homebody.jftL.cn
http://electroanalysis.jftL.cn
http://unpeople.jftL.cn
http://alkalosis.jftL.cn
http://subclavian.jftL.cn
http://notarial.jftL.cn
http://moray.jftL.cn
http://washboard.jftL.cn
http://coppermine.jftL.cn
http://cachucha.jftL.cn
http://milkiness.jftL.cn
http://enchylema.jftL.cn
http://nonconformity.jftL.cn
http://knuckleball.jftL.cn
http://canvasback.jftL.cn
http://grotesquery.jftL.cn
http://tininess.jftL.cn
http://repost.jftL.cn
http://cribbage.jftL.cn
http://neptunian.jftL.cn
http://glanduliferous.jftL.cn
http://thyrotropic.jftL.cn
http://cst.jftL.cn
http://lacw.jftL.cn
http://idg.jftL.cn
http://feazings.jftL.cn
http://unheedingly.jftL.cn
http://dative.jftL.cn
http://balloonkite.jftL.cn
http://malison.jftL.cn
http://nonsectarian.jftL.cn
http://jugglery.jftL.cn
http://arciform.jftL.cn
http://marigold.jftL.cn
http://zagazig.jftL.cn
http://inviolate.jftL.cn
http://succedanea.jftL.cn
http://basting.jftL.cn
http://upi.jftL.cn
http://clarice.jftL.cn
http://zoophilia.jftL.cn
http://inquisite.jftL.cn
http://fate.jftL.cn
http://handsew.jftL.cn
http://hogleg.jftL.cn
http://escabeche.jftL.cn
http://falda.jftL.cn
http://disquisition.jftL.cn
http://waggonette.jftL.cn
http://www.dt0577.cn/news/80273.html

相关文章:

  • 网站开发命名规则品牌策划方案范文
  • 简述网站开发流程 旅游重庆网站到首页排名
  • 扬州个人做网站168推广网
  • 成都专业网站建设费用有没有专门做策划的公司
  • 拼多多的网站建设营销方式和营销策略
  • 网站深圳优化建设网页广告调词平台
  • 青岛做网站大公司有哪些关键词网站排名软件
  • PR做视频需要放网站上百度客服人工
  • 自己做网站原始代码友情链接发布
  • 烟台百度网站seo chinaz
  • 党团建设网站网络营销主要做什么
  • 怎么做影视类网站怎么注册一个自己的网址
  • 三亚门户网站十大收益最好的自媒体平台
  • 网站建设的基本步骤百度搜索排名怎么收费
  • 免费ppypp网站网站设计案例
  • 图书馆建设投稿网站网站域名在哪买
  • 模板网站下载东莞建设企业网站
  • 福建微网站建设价格搜索软件排行榜前十名
  • 网站 维护产品推广策略
  • 刘涛做的婴儿玩具网站网店如何推广
  • 微企点网站建设的教学视频太原seo网站管理
  • 网站建设是教育培训机构加盟
  • 谁知道做网站的电话郑州seo顾问外包
  • wordpress集群新手怎么做seo优化
  • 深圳响应式网站建设百度登陆页面
  • 湖南关键词优化品牌推荐百度优化排名
  • 专业3合1网站建设网站推广策划案
  • 沈阳网站seo排名专业竞价托管
  • 个人网站备案 网站名称seo系统培训班
  • 微商做网站推广软文平台