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

济南网站开发哪家好环境建设公司网站

济南网站开发哪家好,环境建设公司网站,韶关市网站建设,拓者设计官网网页版系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦#xff01;#xff01;#xff01; 现在的一切都是为将来的梦想编织翅膀#xff0c;让梦想在现实中展翅高飞。 Now everythi…系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 结构型设计模式之组合模式 系列文章目录一、组合模式介绍二、组合模式优缺点2.1 优点2.2 缺点 三、组合模式使用场景四、组合模式实现 一、组合模式介绍 ⚠️ 意图 将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 ⚠️ 主要解决 它在我们树型结构的问题中模糊了简单元素和复杂元素的概念客户程序可以像处理简单元素一样来处理复杂元素从而使得客户程序与复杂元素的内部结构解耦。 ⚠️ 何时使用 1、您想表示对象的部分-整体层次结构树形结构。 2、您希望用户忽略组合对象与单个对象的不同用户将统一地使用组合结构中的所有对象。 ⚠️ 如何解决 树枝和叶子实现统一接口树枝内部组合该接口。 现有一个公司需要实现一个广播的功能用来通知给公司所有部门重要的信息。如果需要广播那么必须通过每一个部门类的实例去调用各自部门的广播接口。通过一个抽象类来抽象出广播接口各个部门和公司都通过继承实现抽象接口。如此实现可以将所有部门放在一个容器内遍历实现其广播接口。如果公司不扩大永远有这几个部门并且没有分公司的话是没问题的。如果再要添加一个部门就必须实现一个部门类再修改总公司类。这明显违背了开闭原则。既然我们通过抽象类来实现了其方法那就可以实现抽象的增加删除查询接口。如此一来如果要有新的部门 那么只需要通过调用添加接口来增加新部门 广播的时候只需要遍历容器中的广播接口即可。实现类图如下 图1_1 组合模式类图 组合模式将对象组合成树形结构以表示“部分-整体”的层次结构组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 “组合对象” 的含义。 组合模式可以让客户端像修改配置文件一样简单的完成本来需要流程控制语句来完成的功能。 二、组合模式优缺点 2.1 优点 简化客户端调用实现符合开闭原则。高层模块调用简单。节点自由增加 2.2 缺点 如果业务逻辑负责则实现组合模式比较困难。 在使用组合模式时其叶子和树枝的声明都是实现类而不是接口违反了依赖倒置原则。 三、组合模式使用场景 适用于“整体-部分”层次的树形结构的。部分、整体场景如树形菜单文件、文件夹的管理。 客户端对组合对象统一的使用所有对象。 四、组合模式实现 Component.h #ifndef COMPONENTS_H_ #define COMPONENTS_H_#include iostream #include vectorusing namespace std;class Components { public:Components(std::string strName):m_strName(strName){}virtual void Operation() 0;virtual void AddSubCompany(Components* subCompany);virtual void DelSubCompany(Components* subCompany);virtual Components* GetCompanyByIndex(int iIndex);protected:std::string m_strName; };class ConcreteCompany : public Components { public:ConcreteCompany(std::string strName):Components(strName){}~ConcreteCompany();virtual void Operation();virtual void AddSubCompany(Components* subCompany);virtual void DelSubCompany(Components* subCompany);virtual Components* GetCompanyByIndex(int iIndex); private:std::vectorComponents* m_vecSubItem; };class FinanceDepartment : public Components { public:FinanceDepartment(std::string strName):Components(strName){}virtual void Operation(); };class HRDepartment : public Components { public:HRDepartment(std::string strName):Components(strName){}virtual void Operation(); };#endifComponent.cpp #include Company.h #include algorithm#ifndef SAFE_DELETE #define SAFE_DELETE(p){if((p) ! NULL){delete (p); (p) NULL;}} #endifvoid Components::AddSubCompany( Components* subCompany ) {cout Have no realized! endl; }void Components::DelSubCompany( Components* subCompany ) {cout Have no realized! endl; }Components* Components::GetCompanyByIndex( int iIndex ) {cout Have no realized! endl;return NULL; }//******************// //**CentralCompany**// //******************//ConcreteCompany::~ConcreteCompany() {std::for_each(m_vecSubItem.begin(),m_vecSubItem.end(),[](Components* item){SAFE_DELETE(item);}); }void ConcreteCompany::Operation() {std::for_each(m_vecSubItem.begin(),m_vecSubItem.end(),[](Components* item){item-Operation();}); }void ConcreteCompany::AddSubCompany( Components* subCompany ) {if (subCompany ! NULL){m_vecSubItem.push_back(subCompany);} }void ConcreteCompany::DelSubCompany( Components* subCompany ) {for (auto it m_vecSubItem.begin(); it ! m_vecSubItem.end(); it){if ((*it) subCompany){m_vecSubItem.erase(it);SAFE_DELETE(subCompany);break;}} }Components* ConcreteCompany::GetCompanyByIndex( int iIndex ) {if (iIndex 0 || iIndex m_vecSubItem.size()){return NULL;}return m_vecSubItem[iIndex]; }void FinanceDepartment::Operation() {cout m_strName.c_str() endl; }void HRDepartment::Operation() {cout m_strName.c_str() endl; }main.cpp #include iostream #include Company.husing namespace std;int main() {Components* Central new ConcreteCompany(Central Company);Central-AddSubCompany(new FinanceDepartment(Central Finance Department));Central-AddSubCompany(new HRDepartment(Central HR Department));Components* Xian new ConcreteCompany(XiAn Company);Xian-AddSubCompany(new FinanceDepartment(XiAn Finance Department));Xian-AddSubCompany(new HRDepartment(XiAn HR Department));Central-AddSubCompany(Xian);Central-Operation();cout endl;Central-DelSubCompany(Xian);Central-Operation();return 0; }输出 Central Finance DepartmentCentral HR DepartmentXi’An Finance DepartmentXi’An HR DepartmentCentral Finance DepartmentCentral HR Department
http://www.zqtcl.cn/news/911332/

相关文章:

  • 公司注册流程聊城网站优化案例
  • 化妆品网站建设实施方案杭州seo代理公司
  • 网站小图片素材高质量外链
  • 福州个人建站模板有没有一些有试卷做的网站
  • 教你如何建设网站阿里去旺道seo优化
  • 想做一个个人网站怎么做网站组成部分
  • 旅游门户网站模板下载全国最新产品代理商
  • 老河口网站设计中企动力科技做什么的
  • 如何建立网站管理系统甘孜州住房和城乡规划建设局网站
  • 阿里网站建设新闻门户网站什么意思
  • 桂林微信网站wordpress 连接信息
  • 电商网站开发简历跨境电商怎么搞
  • php小型网站开发百度知道小程序
  • 风铃网站具体是做那方面的contact form7 v2.1.2 wordpress
  • 临沂网站建设举措网站数据不变重新安装wordpress
  • 外贸网站建设双语网站建设红色大气网络公司企业网站源码_适合广告设计
  • 温州哪里有做网站的阳朔到桂林机场
  • 商务网站建设详细流程小程序商城服务好的商家
  • 苏州建站模板搭建南京地铁最新消息
  • wordpress建网站教程威海建设招聘信息网站
  • 如何制作一网站企业中标信息查询网
  • 百度推广咨询seo搜索引擎优化平台
  • 建设网站要不要投资钱哪里建设网站最好
  • 长沙网站制作公司地址农业推广作业
  • 网站创意设计公司定制网站开发价格
  • 专业网站建设加盟合作怀化seo快速排名
  • 房山区网站建设wordpress自动采集翻译插件怎么用
  • 郴州做网站 郴网互联网站制作公司起名
  • 织梦做的的网站首页显示空白查企业营业执照的网站
  • 葫芦岛公司做网站外贸西班牙语网站建设