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

网站建设维护管理软件辽宁省建设厅官方网

网站建设维护管理软件,辽宁省建设厅官方网,网站建设与 维护实训报告范文,山东省建设管理中心网站首页作者#xff1a;翟天保Steven 版权声明#xff1a;著作权归作者所有#xff0c;商业转载请联系作者获得授权#xff0c;非商业转载请注明出处 一、抽象工厂模式是什么#xff1f; 抽象工厂模式是一种创建型的软件设计模式#xff0c;该模式相当于升级版的工厂模式。 如果…作者翟天保Steven 版权声明著作权归作者所有商业转载请联系作者获得授权非商业转载请注明出处 一、抽象工厂模式是什么 抽象工厂模式是一种创建型的软件设计模式该模式相当于升级版的工厂模式。 如果说工厂模式对应一个产品系列那抽象工厂就对应了多个产品系列。比如工厂模式中有鞋子、衣服和裤子可以生产那抽象工厂模式就会衍生出耐克工厂和阿迪工厂这两个工厂分别生产各自品牌的鞋子、衣服和裤子客户只需要选择具体工厂和想要的产品即可。如果想要替换产品系列也只需要将具体工厂切换为别的品牌就行了。 抽象工厂模式的优点 具体类分离。具体产品类在具体工厂的实现中进行了分离和归类。易于更换产品族。当客户想要改变整个产品族时只需要切换具体工厂即可。利于产品一致性。当产品族的各个产品需要在一起执行时抽象工厂可以确保客户只操作同系列产品而不会进行跨品牌的组合。抽象工厂模式的缺点 不利于添加新种类产品。每加一个新的种类如多一个项链类型的产品那每一个具体工厂都要进行代码的扩展且破坏了原先规定的结构违反了开闭原则。二、抽象工厂模式 2.1 结构图 客户端即Main主函数选择具体工厂(族)通过该工厂产生该系列下的具体产品(苹果和香蕉)切换具体工厂产生新系列的具体产品。 2.2 代码示例 场景描述我联系了一家中国工厂品尝该厂的苹果和香蕉吃完后又找到一家美国工厂品尝他家的苹果和香蕉对比下口感。 //Prodect.h /****************************************************/ #pragma once #include iostreamusing 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.husing 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.husing 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_castAppleProdect*(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_castAppleProdect*(C)-getColor() 色 endl;delete C;delete D;delete factoryB;cout 享用完毕。不如China。 endl;return 0; } 程序结果如下。 在上述示例中我们可以看到这两个工厂都有同样的系列产品(苹果和香蕉)我想体验新的系列产品只需要更换具体工厂即可。 三、总结 我尽可能用较通俗的话语和直观的代码例程来表述我对抽象工厂模式的理解或许有考虑不周到的地方如果你有不同看法欢迎评论区交流希望我举的例子能帮助你更好地理解抽象工厂模式。 如果文章帮助到你了可以点个赞让我知道我会很快乐~加油
http://www.hkea.cn/news/14550442/

相关文章:

  • 西安网站托管排名江西科技学校网站建设
  • 个人可否建立网站移动网站和桌面网站区别
  • 网站的栏目建设在哪里wordpress设置多语言
  • 河间网站建设无人机东莞网站建设
  • 常德微网站开发泰兴市 建设安全监察网站
  • 罗湖网站建设联系电话正常做网站多少钱
  • 免费做网站app下载北京展览展示设计有限公司
  • 外贸网站建设需要注意事项一加官方网站进入
  • 张家港企业做网站wordpress微信分享按钮
  • dede5.7内核qq个性门户网站源码企业网页有免费的吗
  • 营销型企业网站分析与诊断wordpress是谁写的
  • 有关做粪污处理设备的企业网站贴图库外链图床wordpress插件
  • 河南快速网站备案东莞公司注册服务平台
  • 深圳网站建设明细报价表发布平台有哪些
  • 郑州二七区网站建设软件开发流程图怎么做
  • 合肥商城网站建设多少钱中国培训网是国家公认的吗
  • 如何创立一个网站销售成功案例分享
  • 深圳网站seo推广网站seo知识
  • 企业网站多少钱一年cms 做网站模板
  • 做网站后端要学什么办文明网站做文明网民活动方案
  • 安徽创誉建设工程有限公司网站河北建设厅网站初始密码
  • 加强残联网站建设网站吸引力
  • 国内网站 备案重庆建设工程造价信息总站
  • 知识产权网站建设青岛网络公司哪家专业
  • 西安做网站比较好的公司中国服务器在外国网站有哪些
  • 网站做视频窗口接口收费么公司内部网站建设的意义
  • 广东网站设计公司价格建立一个网站需要人员
  • 学生html个人网站模板网站生成手机网站
  • 平面设计网站中文怎么快速做网站
  • 企业网站推广平台安康养老院收费