组合模式

组合模式(Composite Pattern),属于结构型模式,组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性(统一的接口),在调用时可以忽略复杂的层次结构,使用统一的方式去操作层次结构中的所有对象。使程序能够与复杂元素的内部结构解耦。

下面是一个操作文件夹的demo:

文件结构:
这里写图片描述

文件接口:

public abstract class File {
    String name;

    public File(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void display();
}

不同类型的文件:

public class ImageFile extends File {
    public ImageFile(String name) {
        super(name);
    }

    @Override
    public void display() {
        System.out.println(super.getName());
    }
}

public class TextFile extends File {
    public TextFile(String name) {
        super(name);
    }

    @Override
    public void display() {
        System.out.println(super.getName());
    }
}

实现了文件接口的文件夹:

public class Folder extends File {
    private List<File> fileList;

    public Folder(String name) {
        super(name);
        fileList = new ArrayList<>();
    }

    @Override
    public void display() {
        // 显示每一个文件
        for (File file : fileList) {
            file.display();
        }
    }

    public void add(File file) {
        fileList.add(file);
    }

    public void remove(File file) {
        fileList.remove(file);
    }
}

调用:

// 新建文件、文件夹
ImageFile image1 = new ImageFile("图片文件1");
ImageFile image2 = new ImageFile("图片文件2");
TextFile textFile = new TextFile("文本文件1");
Folder homeFolder = new Folder("主目录");
Folder imageFolder = new Folder("图片目录");

// 设置层次结构
imageFolder.add(image1);
imageFolder.add(image2);
homeFolder.add(textFile);
homeFolder.add(imageFolder);

// 文本文件的显示
textFile.display();  

// 文件夹的显示
homeFolder.display();

输出结果:

文本文件1

文本文件1
图片文件1
图片文件2

优点 : 可以清楚地定义分层次的复杂对象,增加新部件也更容易。调用简单,组合结构和单个对象的调用方法一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值