组合模式

来源:互联网 发布:电脑摄像头全屏软件 编辑:程序博客网 时间:2024/06/05 04:22

组合模式(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

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

原创粉丝点击