美文网首页
组合模式

组合模式

作者: nieniemin | 来源:发表于2020-06-18 20:21 被阅读0次

什么是组合模式

(Composite:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。

模式角色

组合部件(Component:组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。
Leaf叶子(File):叶子对象,叶子结点没有子结点。
Composite合成部件(Folder):容器对象,定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除(remove)等。

UML类图

组合模式

代码实现

梳理下定义,组合模式又叫部分-整体模式;将对象组合成树状的层次结构的模式。生活中公司/部门/分公司,文件夹/文件/文件夹/....这都是树状结构。代码中通过文件/文件夹来实现组合模式。

public interface Component {

    void display();

    void add(Component component);

    void remove(Component component);
}

public class File implements Component {

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

    @Override
    public void display() {
        System.out.println("叶子节点,文件名:" + name);
    }

    @Override
    public void add(Component component) {

    }

    @Override
    public void remove(Component component) {

    }
}
public class Folder implements Component {

    // 组合模式的核心思想了。文件和文件夹是一种"部分-整体"的关系,文件夹里面既可以包含文件,
    // 也可以包含文件夹,而包含的文件夹里面又可以包含文件和文件夹.....
    private List<Component> list = new ArrayList<>();
    private String name;
    public Folder(String name) {
        this.name = name;
    }

    @Override
    public void add(Component component) {
        list.add(component);
    }

    @Override
    public void remove(Component component) {
        list.remove(component);
    }

    @Override
    public void display() {
        System.out.println("文件夹名称:"+name);
        for (Component component : list) {
            component.display();
        }
    }
}
public class Client {
    public static void main(String[] args) {

        Folder folder = new Folder("design");
        Folder folder2 = new Folder("composite");
        folder.add(folder2);

        File file = new File("Component.java");
        File file2 = new File("File.java");
        File file3 = new File("Folder.java");

        folder.add(file);
        folder.add(file2);
        folder.add(file3);
        folder.display();
    }
}

文件夹名称:design
文件夹名称:composite
叶子节点,文件名:Component.java
叶子节点,文件名:File.java
叶子节点,文件名:Folder.java

优点
组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;
更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”
缺点
设计较复杂,客户端需要花更多时间理清类之间的层次关系;
不容易限制容器中的构件;
不容易用继承的方法来增加构件的新功能;
组合模式完整代码

相关文章

  • 设计模式:组合模式 职责链模式

    组合模式 职责链模式 组合模式 组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。 在组合模式的树形结...

  • 第4章 结构型模式-组合模式

    一、组合模式简介 二、组合模式的优缺点 三、组合模式的使用场景 、组合模式的实例

  • 组合模式(统一叶子与组合对象)

    目录 从生活场景出发,映射组合模式 组合模式的理论概念 组合模式的实现 组合模式在源码中的应用 组合 “优于” 继...

  • 组合模式

    1. 组合模式 1.1 组合模式的定义 组合模式(Composite): 又称部分-整体模式, 将对象组合成树形结...

  • 组合模式

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

  • 设计模式 | 组合模式及典型应用

    本文的主要内容: 介绍组合模式 示例 组合模式总结 源码分析组合模式的典型应用java.awt中的组合模式Java...

  • 组合模式

    一、组合模式介绍 二、组合模式代码实例

  • 组合模式

    设计模式之组合模式 什么是组合模式? 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以...

  • 15、组合模式(Composite Pattern)

    1. 组合模式 1.1 简介   Composite模式,即组合模式,又叫部分整体模式。Composite模式将对...

  • 组合模式原型解析

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

网友评论

      本文标题:组合模式

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