当前位置:主页 > java教程 > Java组合模式

Java结构型模式中的组合模式详解

发布:2023-03-31 14:20:02 59


本站精选了一篇相关的编程文章,网友寇成弘根据主题投稿了本篇教程内容,涉及到Java结构型模式、Java组合模式、Java组合模式相关内容,已被471网友关注,内容中涉及的知识点可以在下方直接下载获取。

Java组合模式

一.介绍

组合模式(Composite Pattern)属于结构型模式。组合模式又叫作部分整体模式,它是一种将对象组合成树状层次结构的模式,用来表示整体-部分的关系,使用户对单个对象和组合对象具有一致的访问性。组合模式有透明方式和安全方式两种实现方式

二.UML类图

1.透明方式

  • 抽象节点中定义了规范,客户端无需区别叶子节点和树枝节点,使用方便
  • 叶子节点本来无add、remove、getChild方法,但是因为抽象中定义了规范,所以必须实现它们,会带来一些安全性问题

2.安全方式

  • 客户端需要区别叶子节点和树枝节点,使用不方便
  • 叶子节点无add、remove、getChild方法,不存在安全性问题

三.具体代码

业务代码

//抽象节点
public abstract class Component {
    abstract void add(Component component);
    abstract void remove(Component component);
    abstract Component getChild(int i);
    abstract void operation();
}
//叶子节点
class Leaf extends Component{
    private String name;
    public Leaf(String name) {
        this.name = name;
    }
    @Override
    void add(Component component) {}
    @Override
    void remove(Component component) {}
    @Override
    Component getChild(int i) {
        return null;
    }
    @Override
    void operation() {
        System.out.print(name);
    }
}
//树枝节点
class Composite extends Component{
    private ArrayList<Component> children = new ArrayList<>();
    @Override
    void add(Component component) {
       children.add(component);
    }
    @Override
    void remove(Component component) {
        children.remove(component);
    }
    @Override
    Component getChild(int i) {
        return children.get(i);
    }
    @Override
    void operation() {
        children.forEach(Component::operation);
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        Component level1 = new Composite();
        level1.add(new Leaf("1"));
        level1.add(new Leaf("2"));
        Component level2 = new Composite();
        level2.add(new Leaf("2.1"));
        level1.add(level2);
        level1.operation();
    }
}

四.使用场景

  • 需要表示一个对象整体与部分的层次结构
  • 要求对用户隐藏组合对象与单个对象的不同,用户可以使用统一的接口操作组合结构中的所有对象
  • 组织机构树
  • 文件/文件夹

五.优点

  • 简化了客户端代码(客户端一致地处理单个对象和组合对象)
  • 符合开闭原则(新增具体实现类不需要更改源代码)

到此这篇关于Java结构型模式中的组合模式详解的文章就介绍到这了,更多相关Java组合模式内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • Java结构型模式之桥接模式详解

    发布:2023-03-29

    桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独立变化的维度,通过桥接模式将这两个维度分离出来,使两者可以独立扩展


  • Java结构型模式之门面模式详解

    发布:2023-03-30

    门面模式又叫外观模式(Facade Pattern),主要用于隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口,本文通过实例代码给大家介绍下java门面模式的相关知识,感兴趣的朋友一起看看吧


  • 一文彻底了解Java的组合模式

    发布:2023-03-25

    组合模式(Composite Pattern)指将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性。本文就来带大家深入了解一下Java的组合模式吧


网友讨论