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

网站建设网址外链发布网站

网站建设网址,外链发布网站,电商网站开发需求文档,江西响应式网页建设1、组合模式的提出 在软件开发过程中,使用者Client过多依赖所操作对象内部的实现结构,如果对象内部的实现结构频繁发生变化,则使用者的代码结构将要频繁地修改,不利于代码地维护和扩展性;组合模式可以解决此类问题。组…

1、组合模式的提出

在软件开发过程中,使用者Client过多依赖所操作对象内部的实现结构,如果对象内部的实现结构频繁发生变化,则使用者的代码结构将要频繁地修改,不利于代码地维护和扩展性;组合模式可以解决此类问题。组合模式可以使用者代码与复杂地操作对象结构进行解耦,根据操作对象的实现结构抽象出一个的基类,让操作对象内部根据需求变化实现复杂数据地操作接口,则使用者使用操作对象提供的统一接口就可完成功能。

2、需求描述

有根节点、子节点、叶子节点,这三种节点都有自己的名字。操作规则:根节点下面可以添加子节点和叶子节点;子节点下面可以添加子子节点和叶子节点;叶子节点下面不能再添加其他节点。

设计一个功能代码,模拟上面的节点添加规则,使用者可以访问这些节点的数据结构。

3、功能实现

(1)UML图如下:

                           

 (2)代码实现如下:

#include <iostream>
#include <string>
#include <vector>class Component
{
protected:std::string m_strName;
public:Component(std::string name):m_strName(std::move(name)){};virtual void operation() const =0;std::string getName(){return m_strName;};virtual ~Component(){};
};class Leaf:public Component
{
public:explicit Leaf(std::string name):Component(name){};virtual void operation() const override{std::cout << "Leaf: " << m_strName << std::endl;};
};class Composite:public Component
{
private:std::vector<Component*>m_vecChildren;
public:explicit Composite(std::string name):Component(name){};void add(Component* p){m_vecChildren.emplace_back(p);};void remove(Component* p){for (auto it = m_vecChildren.begin(); it != m_vecChildren.end(); it++) {if (*it == p) {m_vecChildren.erase(it);std::cout << m_strName << " remove: " << p->getName() << std::endl;break;}}};void operation() const override {std::cout << "Composite: " << m_strName << std::endl;for (const auto& child : m_vecChildren) {child->operation();}}~Composite(){std::vector<Component*>().swap(m_vecChildren);std::cout << "~Composite() " << std::endl;}
};
class Client
{
public:void doWork(){// 创建叶节点Component* leafNode1 = new Leaf("leafNode 1");Component* leafNode2 = new Leaf("leafNode 2");Component* leafNode3 = new Leaf("leafNode 3");// 创建容器子节点Composite* childNode1 = new Composite("childNode 1");Composite* childNode2 = new Composite("childNode 2");// 将叶节点添加到容器子节点中childNode1->add(leafNode1);childNode1->add(leafNode2);childNode2->add(leafNode3);// 将容器节点添加到根容器中Composite* rootNode = new Composite("rootNode");rootNode->add(childNode1);rootNode->add(childNode2);// 调用根容器的操作方法,将逐层遍历整个组合结构并调用每个节点的操作方法rootNode->operation();//移除节点std::cout << "\n" << std::endl;childNode1->remove(leafNode2);rootNode->remove(childNode2);std::cout << "\n" << std::endl;// 调用根容器的操作方法,将逐层遍历整个组合结构并调用每个节点的操作方法rootNode->operation();delete leafNode1;delete leafNode2;delete leafNode3;delete childNode1;delete childNode2;delete rootNode;leafNode1 = nullptr;leafNode2 = nullptr;;leafNode3 = nullptr;;childNode1 = nullptr;;childNode2 = nullptr;;rootNode = nullptr;;}
};
int main()
{Client obj;obj.doWork();return 0;
}

 程序运行结果如下:

http://www.dt0577.cn/news/20058.html

相关文章:

  • 电子商务网站建设运营百度网站联系方式
  • 国外免费服务器提供seo快速排名网站优化
  • 湛江做网站seo拼多多关键词优化步骤
  • 天猫淘宝优惠券网站怎么做推广一手渠道
  • 富阳建设局网站网站外链查询
  • wordpress获取分类导航推动防控措施持续优化
  • 南宁高端网站建设公司手机百度免费下载
  • 网页设计作业可爱的家乡seo研究中心论坛
  • 使用brackets做网站百度游戏app下载
  • 做网站前台用什么问题热点时事新闻
  • 网站推广怎么写做一个公司网站要多少钱
  • 在中国做采购在哪个网站找产品网站怎么做推广
  • 团建活动策划合肥百度快速排名优化
  • 定制企业网站开发公司微信营销推广公司
  • 做网站需要给设计提供加快实施创新驱动发展战略
  • 网站建设清单网络平台营销
  • 自己的网站怎么做seo实体店营销方案
  • 合肥市人民政府办公室招聘天津百度seo排名优化
  • wordpress免费主题模板南昌seo服务
  • 做网站的艰辛抖音优化是什么意思
  • 网络推广推广外包服务东莞网络推广及优化
  • 网站怎么做短信营销免费设计模板网站
  • 网站维护服务费dw网站制作
  • 做传感器交易的网站百度风云榜官网
  • 静安网站开发爱站关键词挖掘软件
  • 如何做一名合格的新闻网站编辑网络销售怎么聊客户
  • 做的好的网站公关公司经营范围
  • 西班牙语 b2b网站开发成都排名seo公司
  • 做视频付费网站厦门网站建设平台
  • 蚌埠市建设局网站域名注册阿里云