组合模式

发布时间 2024-01-03 17:14:31作者: Men!

实验10:组合模式

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

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

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

[实验任务]:组合模式

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

类图

源代码

public abstract class AbstractFile
{
    public abstract void add(AbstractFile element);
    public abstract void remove(AbstractFile element);
    public abstract void display();
}
 
import java.util.ArrayList;
 
public class Folder extends AbstractFile
{
    private ArrayList<AbstractFile> fileList = new ArrayList<>();
    private String fileName;
 
    public Folder(String fileName)
    {
        this.fileName = fileName;
    }
 
    /**
     * 添加文件
     */
    @Override
    public void add(AbstractFile element)
    {
        fileList.add(element);
        // 获取类的简单名称
        String elementName = element.getClass().getSimpleName();
        //输出提示信息
        System.out.println(fileName + "添加了一个" + elementName);
    }
 
    /**
     * 删除文件
     */
    @Override
    public void remove(AbstractFile element)
    {
        fileList.remove(element);
        // 获取类的简单名称
        String elementName = element.getClass().getSimpleName();
        //输出提示信息
        System.out.println(fileName + "删除了一个" + elementName);
    }
    
    /**
     * 递归打印文件夹里的内容
     */
    @Override
    public void display()
    {
        System.out.println(fileName);
        System.out.println("-------" + fileName + "包括-------");
        for (AbstractFile object : fileList)
        {
            object.display();
        }
    }
}
 
public class ImageFile extends AbstractFile
{
    private String fileName;
 
    public ImageFile(String fileName)
    {
        this.fileName = fileName;
    }
 
    @Override
    public void add(AbstractFile element)
    {
        System.out.println("add ImageFile");
    }
 
    @Override
    public void remove(AbstractFile element)
    {
        System.out.println("remove ImageFile");
    }
 
    @Override
    public void display()
    {
        System.out.print(fileName);
        System.out.println(" ImageFile");
    }
}
 
public class TextFile extends AbstractFile
{
    private String fileName;
 
    public TextFile(String fileName)
    {
        this.fileName = fileName;
    }
 
    @Override
    public void add(AbstractFile element)
    {
        System.out.println("add TextFile");
    }
 
    @Override
    public void remove(AbstractFile element)
    {
        System.out.println("remove TextFile");
    }
 
    @Override
    public void display()
    {
        System.out.print(fileName);
        System.out.println(" TextFile");
    }
}
 
public class VideoFile extends AbstractFile
{
    private String fileName;
 
    public VideoFile(String fileName)
    {
        this.fileName = fileName;
    }
 
    @Override
    public void add(AbstractFile element)
    {
        System.out.println("add VideoFile");
    }
 
    @Override
    public void remove(AbstractFile element)
    {
        System.out.println("remove VideoFile");
    }
 
    @Override
    public void display()
    {
        System.out.print(fileName);
        System.out.println(" VideoFile");
    }
}