美文网首页Java 设计模式
Java设计模式 - 组合模式

Java设计模式 - 组合模式

作者: a57ecf3aaaf2 | 来源:发表于2017-11-22 20:51 被阅读1次

定义

组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

说到组合模式,大家应该会想到“树形结构”、“层次结构”、“物以类聚”、“整体与部分”等字眼,的确,组合模式就是将一些具有一致性的对象组合起来,便于管理。

举例

看下面的代码,定义一个 File 基类:

public interface File {
    boolean isDirectory();
}

然后定义一个 Directory 子类:

public class Directory implements File {

    private String name;
    private Set<File> files = new HashSet<>();

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

    public String getName() {
        return name;
    }

    @Override
    public boolean isDirectory() {
        return true;
    }

    public void add(File file) {
        files.add(file);

    }

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

    public Set<File> getFiles() {
        return files;
    }
}

Directory 具有容器的功能,所以添加了 add 、remove 等方法。

下面来看一个具体的 PdfFile 的实现过程:

public class PdfFile implements File {

    private String name;

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

    public String getName() {
        return name;
    }

    @Override
    public boolean isDirectory() {
        return false;
    }
}

下面是客户类:

public class Client {
    public static void main(String[] args) {
        Directory root = new Directory("root");

        File f = new PdfFile("Design Pattern on JAVA");
        File f1 = new PdfFile("开发文档");
        File f2 = new PdfFile("设计模式");

        Directory d = new Directory("document");

        root.add(f);
        root.add(d);

        d.add(f1);
        d.add(f2);

        print(root.getName(), 1);
        iterate(root, 2);
    }

    public static void iterate(Directory d, int i) {
        for (File f : d.getFiles()) {
            if (f.isDirectory() && f instanceof Directory) {
                print(((Directory) f).getName(), i);
                int j = i + 1;
                iterate((Directory) f, j);
            } else {
                print(f instanceof PdfFile ? ((PdfFile) f).getName() : "", i);
            }
        }
    }

    public static void print(String s, int i) {
        for (int j = 0; j < i; j++) {
            System.out.print("  ");
        }
        System.out.println(s);
    }
}

以上就是一个简单的组合模式的实现,print 之后就是一个具有层次结构的模型。

Android 中的组合模式

View、ViewGroup 之间的关系就是组合模式的具体表现。

本文由Fynn_原创,未经许可,不得转载!

相关文章

  • Java设计模式之08_Composite(组合模式)

    更多Java设计模式:Java设计模式-目录 一、定义 组合模式(Composite Pattern)也叫合成模式...

  • java/android 设计模式学习笔记(12)---组合模式

    java/android 设计模式学习笔记(12)---组合模式 【备注】只用于个人收藏

  • Java设计模式<组合模式>

    Java设计模式<组合模式> 意图 对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和...

  • Java设计模式--组合模式

    在这种模式下,所有对象像树形结构一样,有机的结合在了一起,体现出层次感,各种层次的节点可以自由增加,上下层调用简单...

  • Java设计模式----组合模式

    使用组合模式的场景 把部分和整体的关系用树型结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。 组...

  • Java设计模式——组合模式

    Java设计模式之组合模式 回顾 之前分享了桥接模式,相信大家对解耦已经有了一个新的认识。 组合模式 简介 将对象...

  • Java设计模式 - 组合模式

    定义 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有...

  • Java 设计模式 -- 组合模式

    组合模式 : 允许你将对象组合成树形结构来表现 "整体/部分" 层次结构。组合能够让我们用一致的方式处理个别对象以...

  • java设计模式 - 组合模式

    1.定义 又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-...

  • 组合模式

    设计模式系列7--组合模式 《Objective-c 编程之道 iOS 设计模式解析》 - 组合模式 常见组合模式...

网友评论

    本文标题:Java设计模式 - 组合模式

    本文链接:https://www.haomeiwen.com/subject/bmiovxtx.html