首页 > 其他分享 >24

24

时间:2025-01-06 23:35:21浏览次数:1  
标签:24 void AbstractFile element add fileName public

实验10:组合模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解组合模式的动机,掌握该模式的结构;

2、能够利用组合模式解决实际问题。

 

[实验任务一]:组合模式

用透明组合模式实现教材中的“文件夹浏览”这个例子。

实验要求:

1. 文件的执行不需真正实现,只需简单提示即可;

 

2. 提交源代码;

JAVA

package rjsj.no10;

public class Client {

    public static void main(String[] args) {

        AbstractFile obj1,obj2,obj3,obj4,obj5;

        Folder plate1,plate2,plate3;

        obj1 = new ImageFile("图片文件1");

        obj2 = new TextFile("文本文件1");

        plate1 = new Folder("父文件夹1");

        plate1.add(obj1);

        plate1.add(obj2);

        obj3 = new VideoFile("视频文件1");

        obj4 = new Folder("子文件夹1");

        plate2 = new Folder("父文件夹2");

        plate2.add(obj3);

        plate2.add(obj4);

        obj5 = new TextFile("文本文件2");

        plate3 = new Folder("父文件夹3");

        plate3.add(obj5);

        plate3.add(plate1);

        plate3.add(plate2);

        plate3.display();

    }

}

package rjsj.no10;

import java.util.ArrayList;

public class Folder extends AbstractFile{

    private String fileName;

    private ArrayList fileList=new ArrayList();

    public Folder(String filename) {

        this.fileName=new String();

        this.fileName=filename;

    }

    @Override

    public void add(AbstractFile element) {

        fileList.add(element);

        System.out.println("新建文件夹");

    }

    @Override

    public void remove(AbstractFile element) {

        fileList.remove(element);

        System.out.println("删除文件夹");

    }

    @Override

    public void display() {

        for (Object obj:fileList){

            ((AbstractFile)obj).display();

        }

        System.out.println("打开文件夹");

    }

} package rjsj.no10;

public class ImageFile extends AbstractFile{

    private String fileName;

    public ImageFile(String filename) {

        this.fileName=new String();

        this.fileName=filename;

    }

    @Override

    public void add(AbstractFile element) {

        System.out.println("添加图片文件");

    }

    @Override

    public void remove(AbstractFile element) {

        System.out.println("移除图片文件");

    }

    @Override

    public void display() {

        System.out.println(fileName);

        System.out.println("打开图片文件");

    }

}

package rjsj.no10;

public class TextFile extends AbstractFile{

    private String fileName;

    public TextFile(String filename) {

        this.fileName=new String();

        this.fileName=filename;

    }

    @Override

    public void add(AbstractFile element) {

        System.out.println("添加文本文件");

    }

    @Override

    public void remove(AbstractFile element) {

        System.out.println("移除文本文件");

    }

    @Override

    public void display() {

        System.out.println(fileName);

        System.out.println("打开文本文件");

    }

}

package rjsj.no10;

public class VideoFile extends AbstractFile{

    private String fileName;

    public VideoFile(String filename) {

        this.fileName=new String();

        this.fileName=filename;

    }

    @Override

    public void add(AbstractFile element) {

        System.out.println("添加视频文件");

    }

    @Override

    public void remove(AbstractFile element) {

        System.out.println("移除视频文件");

    }

    @Override

    public void display() {

        System.out.println(fileName);

        System.out.println("播放视频文件");

    }

}

package rjsj.no10;

public abstract class AbstractFile {

    public abstract void add(AbstractFile element);

    public abstract void remove(AbstractFile element);

    public abstract void display();

}

C++

#include<iostream>

#include<string>

#include<list>

using namespace std;

class AbstractFile {

public:

    virtual void add(AbstractFile* element) = 0;

    virtual void remove(AbstractFile* element) = 0;

    virtual void display() = 0;

};

class VideoFile : public AbstractFile {

private:

    string fileName;

public:

    VideoFile(string fileName) {

        this->fileName = fileName;

    }

    void add(AbstractFile* element) {

        cout << "打开VideoFile" << endl;

    }

    void remove(AbstractFile* element) {

        cout << "关闭VideoFile" << endl;

    }

    void display() {

        cout << "浏览VideoFile" << endl;

    }

    void displayFile() {

        cout << "VideoFile的内容" << endl;

    }

};

class TextFile :public AbstractFile {

private:

    string fileName;

public:

    TextFile(string fileName) {

        this->fileName = fileName;

    }

    void add(AbstractFile* element) {

        cout << "打开" <<this->fileName<< endl;

    }

    void remove(AbstractFile* element) {

        cout << "关闭" << this->fileName<<endl;

    }

    void display() {

        cout << "浏览" << this->fileName<<endl;

    }

    void displayFile() {

        cout <<this->fileName<< "的内容" << endl;

    }

};

class ImageFile :public AbstractFile {

private:

    string fileName;

public:

    ImageFile(string fileName) {

        this->fileName = fileName;

    }

    void add(AbstractFile* element) {

        cout << "打开" <<this->fileName<< endl;

    }

    void remove(AbstractFile* element) {

        cout << "关闭"<<this->fileName << endl;

    }

    void display() {

        cout << "浏览"<<this->fileName << endl;

    }

    void displayFile() {

        cout <<this->fileName<< "的内容" << endl;

    }

};

class Folder :public AbstractFile {

private:

    list<AbstractFile*>* _list;

    string fileName;

public:

    Folder(string fileName) {

        this->fileName = fileName;

        _list = new list<AbstractFile*>;

    }

    ~Folder() {

        if (_list != NULL)

        {

            while (_list->empty()) {

                delete *(_list->begin());

                _list->erase(_list->begin());

            }

            delete _list;

        }

    }

    string getFileName() const {

        return fileName;

    }

    void add(AbstractFile* element) {

        _list->push_back(element);

    }

    void remove(AbstractFile* element) {

        cout << "关闭"<<this->fileName;

        _list->remove(element);

    }

    void display() {

        if (_list != NULL) {

            list<AbstractFile*>::iterator it = _list->begin();

            while (it != _list->end()) {

                (*it++)->display();

            }

        }

    }

};

int main() {

    AbstractFile *obj1, *obj2, *obj3, *obj4;

    Folder *plate1, *plate2;

    obj1 = new ImageFile("ImageFile");

    obj2 = new TextFile("TextFile");

    plate1 = new Folder("folder1");

    cout << "打开Folder1";

    plate1->add(obj1);

    plate1->add(obj2);

    plate1->display();

    obj3 = new VideoFile("VideoFile");

    cout << "打开Folder2";

    plate2 = new Folder("folder2");

    plate2->add(obj3);

    plate2->display();

    plate1->remove(obj1);

    plate1->remove(obj3);

}

 

3.注意编程规范。

 

 

标签:24,void,AbstractFile,element,add,fileName,public
From: https://www.cnblogs.com/wanbeibei/p/18656524

相关文章

  • 【即插即用完整代码】CVPR 2024部分单头注意力SHSA,分类、检测和分割SOTA!
    文章末尾,扫码添加公众号,领取完整版即插即用模块代码!适用于所有的CV二维任务:图像分割、超分辨率、目标检测、图像识别、低光增强、遥感检测等摘要(Abstract)背景与动机:近年来,高效的视觉Transformer(ViT)在资源受限的设备上表现出色,具有低延迟和良好的性能。传统的高效ViT模型......
  • 复旦大学2024--2025学年第一学期(24级)高等代数I期末考试第七大题解答
    七、(10分) 设$V$是数域$\mathbb{K}$上的$n$维线性空间,$\varphi,\psi$是$V$上的幂等线性变换, 满足$\varphi\psi=\psi$且$\mathrm{Ker}\varphi$是$\psi$-不变子空间.证明:(1)$\mathrm{r}(\psi)\leq\mathrm{r}(\varphi)$;(2)若$\mathrm{r}(\psi)=\mathrm{......
  • 1929-2024年全球气象站点逐日气象指标数据(气温、降水量、风速等12项)
    全球气象站点的逐日12项气象指标数据,数据时间为1929年-2024年,地理坐标系是WGS-84。本数据的气象指标包括:平均温度、平均露点、平均海平面压力、平均观测站压力、平均能见度、平均风速、最大持续风速、最高气温、最低气温、降水量、积雪深度、气象情况指示。该数据集提供了1......
  • DataGrip 2024.3.3 安装激活详细使用教程(激活至2026,实测是永久,亲测!)
    开发工具推荐:DataGrip安装激活详细使用教程(激活至2026,实际上永久,亲测!)申明:本教程DataGrip补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!DataGrip是JetBrains公司推出的一款功能强大的数据库语言集成开发环境(IDE),凭......
  • MasterSAM downloadService存在任意文件下载漏洞(CVE-2024-55457)
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • PhpStorm 2024.3.1.1 安装激活教程(激活至2026,实际上永久,亲测!)以及常见问题处理
    申明:本教程PhpStorm补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!卸载老版本PhpStorm首先,如果小伙伴的电脑上有安装老版本的PhpStorm,需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可):TIP:如果......
  • (2024最新毕设合集)基于Django的电影资讯共享平台-10223|可做计算机毕业设计JAVA、PHP、
    目录摘要Abstract1绪论1.1研究背景1.2研究意义1.3论文结构与章节安排2电影资讯共享平台系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3 社会可行性2.1.4法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.......
  • 复旦大学2024--2025学年第一学期(24级)高等代数I期末考试第八大题解答
    八、(10分) 设$A,B$为$n$阶实矩阵,满足$A^2+B^2=AB$且$AB-BA$为非异阵, 求证:$n$是3的倍数且$|BA-AB|>0$.证明 设$\omega=-\dfrac{1}{2}+\dfrac{\sqrt{3}}{2}\mathrm{i}$,则$\omega^2=\overline{\omega}=-\dfrac{1}{2}-\dfrac{\sqrt{3}}{2}\mathrm{i}$,于......
  • 2024实测验证可用的股票数据接口集合:python、JavaScript 、JAVA等实例代码演示教你如
    最近一两年,股票量化分析越来越受欢迎了。想要入行,首先得搞定股票数据。毕竟,所有量化分析都是建立在数据之上的,实时交易、历史交易、财务、基本面,这些数据咱们都得有。咱们的目标就是挖掘这些数据中的价值,来指导咱们的投资策略。为了找数据,我可是尝试了各种方法,自己动手写过......
  • 墨天轮2024年度数据库获奖名单
    随着全球数字化转型的加速及数据量的激增,数据库技术正在迎来前所未有的创新与发展。2024年,云原生、人工智能(AI)等技术的进步,进一步推动了数据库的智能化与高效化演进。在此背景下,国产数据库在技术创新和市场应用方面取得了显著突破,多个国产厂商凭借领先的技术优势和强劲的市场表现,......