每日总结

软件设计                  石家庄铁道大学信息学院

 

实验10:组合模式

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

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

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

 


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

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

实验要求:

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

 

2. 提交源代码;

C++:

#include <iostream>

#include <list>

using namespace std;

class AbstractFile{

public:

    virtual void add(AbstractFile *abstractFile)=0;

    virtual void remove(AbstractFile *abstractFile)=0;

    virtual void display()=0;

};

class TextFile:public AbstractFile{

public:

    explicit TextFile(string fileName){

        this->fileName=std::move(fileName);

    }

private:

    string fileName;

public:

    void add(AbstractFile *abstractFile)override{

        cout<<"添加了TextFile"<<endl;

    }

    void remove(AbstractFile *abstractFile)override{

        cout<<"删除了TextFile"<<endl;

    }

    void display()override{

        cout<<"展示了TextFile"<<endl;

    }

};

class VideoFile:public AbstractFile{

public:

    explicit VideoFile(string fileName){

        this->fileName=std::move(fileName);

    }

private:

    string fileName;

public:

    void add(AbstractFile *abstractFile)override{

        cout<<"添加了TextFile"<<endl;

    }

    void remove(AbstractFile *abstractFile)override{

        cout<<"删除了TextFile"<<endl;

    }

    void display()override{

        cout<<"展示了TextFile"<<endl;

    }

};

class ImageFile:public AbstractFile{

public:

    explicit ImageFile(string fileName){

        this->fileName=std::move(fileName);

    }

private:

    string fileName;

public:

    void add(AbstractFile *abstractFile)override{

        cout<<"添加了TextFile"<<endl;

    }

    void remove(AbstractFile *abstractFile)override{

        cout<<"删除了TextFile"<<endl;

    }

    void display()override{

        cout<<"展示了TextFile"<<endl;

    }

};

class Folder:public AbstractFile{

public:

    explicit Folder(string fileName){

        this->fileName=std::move(fileName);

    }

private:

    string fileName;

    list<AbstractFile*> fileList;

public:

    void add(AbstractFile *abstractFile)override{

       this->fileList.push_front(abstractFile);

    }

    void remove(AbstractFile *abstractFile)override{

       this->fileList.remove(abstractFile);

    }

    void display()override{

        cout<< this->fileName;

        for (const auto &item: this->fileList){

            cout<<"---"<<endl;

            item->display();

        }

    }

};

int main(){

    AbstractFile *f1, *f2, *f3, *f4;

    Folder *p1, *p2, *p3;

    f1 = new ImageFile("a.jpg");

    f2 = new TextFile("b.txt");

    p1 = new Folder("Image_Text");

    p1->add(f1);

    p1->add(f2);

    f3 = new VideoFile("c.mp4");

    p2 = new Folder("Image_Video");

    p2->add(f1);

    p2->add(f3);

    f4 = new ImageFile("d.jpg");

    p3 = new Folder("Image_Text_Video_Folder");

    p3->add(p1);

    p3->add(p2);

    p3->add(f4);

    p3->display();

    return 0;

}

Java:

Client.java:

package qwe;

 

public class Client

{

    public static void main(String a[])

    {

        AbstractFile obj1,obj2,obj3,obj4;

        Folder plate1,plate2,plate3;

        obj1=new ImageFile("a.jpg");

        obj2=new TextFile("b.txt");

        plate1=new Folder("Image_Text");

        plate1.add(obj1);

        plate1.add(obj2);

 

        obj3=new VideoFile("c.mp4");

        plate2=new Folder("Image_Video");

        plate2.add(obj1);

        plate2.add(obj3);

 

        obj4=new ImageFile("d.jpg");

        plate3=new Folder("Image_Text_Video_Folder");

        plate3.add(plate1);

        plate3.add(plate2);

        plate3.add(obj4);

 

        plate3.display();

 

    }

}

 

AbstractFile.java:

package qwe;

 

public abstract class AbstractFile

{

    public abstract void add(AbstractFile element);

    public abstract void remove(AbstractFile element);

    public abstract void display();

}

 

Folder.java:

package qwe;

import java.util.ArrayList;

import java.util.*;

 

public class Folder extends AbstractFile

{

    private String fileName;

    private ArrayList<AbstractFile> fileList=new ArrayList();

    public Folder(String filename)

    {

        this.fileName=new String();

        this.fileName=filename;

    }

    public void add(AbstractFile element)

    {

        fileList.add(element);

        System.out.println("add Folder");

    }

    public void remove(AbstractFile element)

    {

        fileList.remove(element);

        System.out.println("remove Folder");

    }

    public void display()

    {

        System.out.println(fileName);

        for(Object object:fileList)

        {

            ((AbstractFile)object).display();

        }

        System.out.println("****Folder display****");

    }

}

 

ImageFile.java:

package qwe;

 

public class ImageFile extends AbstractFile

{

    private String fileName;

    public ImageFile(String filename)

    {

        this.fileName=new String();

        this.fileName=filename;

    }

    public void add(AbstractFile element)

    {

        System.out.println("add ImageFile");

    }

    public void remove(AbstractFile element)

    {

        System.out.println("remove ImageFile");

    }

    public void display()

    {

        System.out.print(fileName);

        System.out.println(" ImageFile");

    }

}

 

TextFile.java:

package qwe;

 

public class TextFile extends AbstractFile

{

    private String fileName;

    public TextFile(String filename)

    {

        this.fileName=new String();

        this.fileName=filename;

    }

    public void add(AbstractFile element)

    {

        System.out.println("add TextFile");

    }

    public void remove(AbstractFile element)

    {

        System.out.println("remove TextFile");

    }

    public void display()

    {

        System.out.print(fileName);

        System.out.println(" TextFile");

    }

}}

VideoFile.java:

 

package qwe;

 

public class VideoFile extends AbstractFile

{

    private String fileName;

    public VideoFile(String filename)

    {

        this.fileName=new String();

        this.fileName=filename;

    }

    public void add(AbstractFile element)

    {

        System.out.println("add VideoFile");

    }

    public void remove(AbstractFile element)

    {

        System.out.println("remove VideoFile");

    }

    public void display()

    {

        System.out.print(fileName);

        System.out.println(" VideoFile");

    }

}}

运行截图:

Java:

 

C++:

 

3.注意编程规范。

 

 

posted @   南北啊  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
1 2 3
4
点击右上角即可分享
微信分享提示