设计模式--组合模式

实验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");
    }
}

 运行效果

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值