首页 > 其他分享 >组合模式

组合模式

时间:2023-06-21 09:57:12浏览次数:34  
标签:IFile displaye name 组合 list iter 模式 virtual

#include <iostream>
#include <list>
#include <string>
using namespace std;

//component
class IFile {
public:
    virtual void displaye() = 0;
    virtual int add(IFile* iFile) = 0;
    virtual int remove(IFile *iFile) = 0;
    virtual list<IFile*>* getChild() = 0;
};

//Leaf
class File :public IFile {
public:
    File(string name):m_name(name){}
    virtual void displaye() {
        cout << m_name << endl;
    }

    virtual int add(IFile* ifile) {
        return -1;
    }

    virtual int remove(IFile* ifile) {
        return -1;
    }

    virtual list<IFile*>* getChild() {
        return NULL;
    }
private:
    string m_name;

};

//目录:Composite
class Dir :public IFile {
public:
    Dir(string name) :m_name(name) {
        m_list = new list<IFile*>;
    }

    virtual void displaye() {
        cout << m_name << endl;
    }
    
    virtual int add(IFile* ifile) {
        m_list->push_back(ifile);
        return 0;
    }

    virtual int remove(IFile* ifile) {
        m_list->remove(ifile);
        return 0;
    }

    virtual list<IFile*> * getChild() {
        return m_list;
    }
private:
    string m_name;
    list<IFile*> *m_list;
};

void showTree(IFile* root, int level) {
    if (root == NULL)
        return;
    int i = 0;
    for (i = 0;i < level;i++) {
        printf("\t");
    }

    root->displaye();
    list<IFile*> *list1 = root->getChild();
    if (list1 != NULL) {
        for (list<IFile*>::iterator iter = list1->begin();iter != list1->end();iter++) {
            if ((*iter)->getChild() == NULL) {
                //这是文件
                for (i = 0;i < level;i++) {
                    printf("\t");
                }
                (*iter)->displaye();
            }
            else {
                showTree(*iter, level + 1);
            }
        }
    }
}
一、树形控件

 

标签:IFile,displaye,name,组合,list,iter,模式,virtual
From: https://www.cnblogs.com/zeliangzhang/p/17495501.html

相关文章

  • 三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式。 包
    三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式。包含一个程序例子,有详细的机械参数分析,伺服参数设置,以及追剪凸轮表设置的由来。YID:69100609575345770......
  • 单例模式
    1.将构造函数私有化2.在类中定义一个静态的指向本类型的指针变量3.定义一个返回值为类指针的静态成员函数四种单例模式的实现1.全局类+单例类(全局类负责回收单例类对象堆空间)#include<iostream>usingnamespacestd;classsingleinstance{public:staticsing......
  • 设计模式之工厂模式
    工厂模式是一种对象创建型模式,它提供了一种创建对象的最佳实践。在工厂模式中,我们在创建对象时不使用new关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂模式可以创建一组相关或不相关的......
  • <学习笔记>组合数学
    ####插板法问题一:现有$n$个完全相同的元素,要求将其分为$k$组a,保证每组至少有一个元素,一共有多少种分法?考虑拿$k-1$块板子插入到$n$个元素两两形成的$n-1$个空里面。所以答案就是$$\binom{n-1}{k-1}$$问题二:如果问题变化一下,每组允许为空呢?显然此时没法直接插板......
  • Copula估计边缘分布模拟收益率计算投资组合风险价值VaR与期望损失ES|附代码数据
    全文链接:http://tecdat.cn/?p=24753最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。在这项工作中,我通过创建一个包含四只基金的模型来探索copula,这些基金跟踪股票、债券、美元和商品的市场指数摘要然后,我使用该模型生成模拟值,并使用实际收益和模拟收......
  • 电销机器人,颠覆传统的电销模式
    电销机器人是帮你搭建一个电销后台,对接属于你的专属线路,录制属于你的真人语音话术,帮你代替真人自动拨打电话,把打出来的意向客户自动推送到你的微信上面。电销机器人是非常有用的,它和传统的人工电销不一样。第一、减低人力成本:一个电话销售员从工资、培训、补贴、奖金一个月做少要40......
  • 浅谈项目核算的“全程利润”实现模式
    “怎样评估各事业群/项目群的业绩?如何引导决策?”“今年的利润怎么分配?没有细化的分配依据,怎么办?”“开了这么多类型的项目,是不是有些盲目?资源这么紧张,明年要怎么做?”这一系列的问题,几乎所有的企业都会面临,怎么破?怎么解?用友针对以上困惑推出了一项新的解决方案“项目财务管理PFM”,将......
  • API模式HTTP使用代码模板
    以下是一个使用Python的HTTPAPI请求的代码模板:importrequests#设置请求的URL和参数url='http://example.com/api'params={'param1':'value1','param2':'value2'}#发送HTTPGET请求response=requests.get(url,params=params)#......
  • 桥接模式-09
    概述桥接模式(BridgePattern)又称柄体(HandleandBody)模式、接口模式。它将可能有着继承关系的对象的抽象和实现分离,使得两者可以独立地变化。优点:分离了抽象部分和实现部分,提高了灵活性和可扩展性,隐藏了实现的细节。缺点:降低了系统可理解性,提高了设计难度,有一定的局限......
  • 【OpenGL修行】点线面模式设置
    文章目录点点的大小切换线线的宽窄设置虚线绘制多边形多边形正反绘制&反转多边形表面剔除多边形表面镂空通过初始化数组设置镂空样式通过读取bmp文件设置镂空样式点点的大小切换通过glPointSize()函数即可实现点的大小控制,我画了两个大小不同的点,还是挺明显的。voiddisplay1(){......