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

域名对网站有什么影响爱站网长尾词挖掘工具

域名对网站有什么影响,爱站网长尾词挖掘工具,网站推广团队,app开发公司需要明确哪些内容目录一、概念二、类图详解三、组合模式实现步骤四、代码实现4.1 Component类4.2 Composite类4.3 Leaf类4.4 测试五、扩展一、概念 组合模式又叫整体--部分模式组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分可以一致地对…

目录

  • 一、概念
  • 二、类图详解
  • 三、组合模式实现步骤
  • 四、代码实现
    • 4.1 Component类
    • 4.2 Composite类
    • 4.3 Leaf类
    • 4.4 测试
  • 五、扩展

一、概念

  • 组合模式又叫整体--部分模式
  • 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分
  • 可以一致地对待容器对象和叶子对象。
  • 它使树型结构的问题中,模糊了简单元素复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

二、类图详解

在这里插入图片描述

  • 包含一个抽象组件类Component、叶子结点类Leaf和组件集合类Composite
  • 抽象组件类:组合中的对象声明接口,实现所有类共有接口的行为。声明用于访问和管理Component的子部件的接口。
  • 叶子结点:叶节点对象,就是终端独立结点,不能addRemove其它组件。
  • 组件集合类:实现Component的相关操作,可以继续包含组件集合类和叶子结点。
  • CompositeComponent类形成迭代关联关系。

三、组合模式实现步骤

  • 定义抽象组件接口
  • 实现叶子节点类,实现抽象组件类的接口。
  • 实现组件集合类,实现抽象组件类的接口。
  • 定义环境类,将叶子节点和组件集合加入根组件集合。

四、代码实现

  • 生成目录树结构,目录里面可以再放目录或文件
  • 最终的输出如下
    在这里插入图片描述

4.1 Component类

  • 顶层接口
#pragma once
#include <iostream>class Component
{
public:std::string name;  //叶子结点和组件结点都有名字和类型bool m_isLeaf;     //是否是叶子结点(暂时没用)Component(const std::string& name, bool isLeaf){this->name = name;this->m_isLeaf = isLeaf;}virtual void Add(Component* c) = 0;virtual void Remove(Component* c) = 0;virtual void Display(int depth) = 0;bool isLeaf() const{return this->m_isLeaf;}
};

4.2 Composite类

  • 用来放文件夹或文件
#pragma once
#include <iostream>
#include <list>#include "Component.h"class Composite: public Component
{
private:std::list<Component*> m_component;public:Composite(const std::string& name) : Component(name, false){}void Add(Component* c) override{m_component.push_back(c);}void Remove(Component* c) override{m_component.remove(c);}void Display(int depth) override{std::cout << std::string(depth, '-') << name << std::endl;for (auto item : m_component){item->Display(depth + 2);}}
};

4.3 Leaf类

  • 用来放文件
#pragma once
#include <iostream>
#include "Component.h"class Leaf: public Component
{
public:Leaf(const std::string& name): Component(name, true){}void Add(Component* c) override{std::cout << "Can't add component to leaf." << std::endl;}void Remove(Component* c) override{std::cout << "Can't remove component to leaf." << std::endl;}void Display(int depth) override{std::cout << std::string(depth, '-') << name << std::endl;}
};

4.4 测试

#include "Leaf.h"
#include "Composite.h"class Client
{
private:Component* com;public:Client(Component* obj){com = obj;}void display(int n){com->Display(n);}
};int main()
{Component* root = new Composite("根目录");root->Add(new Leaf("根目录下的文件A"));root->Add(new Leaf("根目录下的文件B"));Component* dir1 = new Composite("根目录下的文件夹FA");dir1->Add(new Leaf("文件夹FA下的文件A"));dir1->Add(new Leaf("文件夹FA下的文件B"));root->Add(dir1);Component* dir2 = new Composite("根目录FA下的文件夹FAX");dir2->Add(new Leaf("文件夹FAX下的文件A"));dir2->Add(new Leaf("文件夹FAX下的文件B"));dir1->Add(dir2);root->Add(new Leaf("根目录下的文件C"));root->Add(new Leaf("根目录下的文件D"));Client c(root);c.display(1);return 0;
}

五、扩展

  • 设计一个饭店的菜单
  • 可以再包含一个菜单或者菜单项
  • 类图如下
    在这里插入图片描述
  • 菜单项图结构如下
    在这里插入图片描述
  • 代码部分请参阅 https://gitee.com/piglittle/design_patterns中的 Head_First_Design_Partterns解决方案下的 composite_pattern项目
http://www.dtcms.com/a/528748.html

相关文章:

  • 解码Linux文件IO之开机动画原理与实现
  • R语言模型分析(一)(1)
  • 成都模板建站代理佛山手工外发加工网
  • 二维差分数组
  • 【Linux网络】定制协议
  • wordpress漫画站wordpress 外部调用
  • python 网站开发流程图微信营销软件破解版
  • HCL-MTC、HiTIN
  • 平方根求解-趋近法步长保守策略数学推导
  • JSP 文件上传
  • 基于深度生成模型的单细胞多时间点数据分析与药物发现
  • FreeRTOS信号量实战:停车场管理
  • 做网站一般不选用的图片格式万能浏览器手机版下载安装
  • Federated Learning-Empowered AI-Generated Content in Wireless Networks
  • 网站建设外包还是自己做乐清网站建设公司
  • 计算机网络自顶向下方法4——详解协议层次及其服务模型
  • 【开题答辩全过程】以 暴肌兔健康饮食推荐系统的设计与实现为例,包含答辩的问题和答案
  • 网站找不到首页网站开发分前台后台
  • 网站微信支付怎么做深圳品牌做网站公司哪家好
  • jEasyUI 创建异步树形菜单
  • fabric.js 中originX originY center设置问题
  • java开发手册与规范
  • 展示网站开发 大概多少钱wordpress+4.2.4中文
  • 深圳建设局官网站对网站建设需求
  • linux:查看某个文件下开启的进程占用的是哪个端口?
  • 【开题答辩过程】以《基于微信小程序的街道水电费缴纳系统》为例,不会开题答辩的可以进来看看
  • (数据结构)栈和队列
  • 体育西网站开发方案成都和奇乐网站建设公司怎么样
  • 网站管理后台 模板河南省建设厅网站总经济师
  • 网站建设难学吗广西建设厅官网站