美文网首页
java设计模式08(组合模式)

java设计模式08(组合模式)

作者: 刺风有道 | 来源:发表于2019-04-21 16:49 被阅读0次

组合模式用于组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。组合模式又可以称为“部分-整体”模式,是一种对象结构型模式。

组合模式使用面向对象的思想来实现树形结构的构建与处理,描述了如何将容器对象和叶子对象进行递归组合,实现简单,灵活性好。

组合模式的结构与实现:
1.Component(抽象构件):可以为抽象类或接口,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明。在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件,删除子构件,获取子构件等。

public abstract class Component {

    public abstract void add(Component component);
    
    public abstract void remove(Component component);
    
    public abstract Component getChild(int node);
    
    public abstract void operation();
}

2.Composite(容器构件):它在组合结构中表示容器结点对象,容器结点包含子节点,其子结点可以是叶子结点,也可以是容器结点,它提供一个集合用于储存子结点,实现了抽象构件中定义的行为,包括那些访问及管理子构件的方法,在其业务方法中可以递归调用子结点的业务方法。

public class Composite extends Component {
    
    private List<Component> list=new ArrayList<>();
    
    private String text;
    
    public Composite(String text) {
        this.text=text;
    }

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

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

    @Override
    public Component getChild(int node) {
        return list.get(node);
    }

    @Override
    public void operation() {
        System.out.println("获取到构件内容:"+text);
        //递归调用构件的方法
        for (Component component : list) {
            component.operation();
        }
    }

}

3.Leaf(叶子构件):他在组合结构中表示叶子结点对象,叶子结点没有子节点,它实现了在抽象构件中定义的行为。对于那些访问及管理子构件的方法,可以通过抛出异常,提示错误等方式处理。

public class Leaf extends Component {
    
    private String text;
    
    public Leaf(String text) {
        this.text=text;
    }

    @Override
    public void add(Component component) {
        // 错误提示
    }

    @Override
    public void remove(Component component) {
        // 错误提示
    }

    @Override
    public Component getChild(int node) {
        // 错误提示
        return null;
    }

    @Override
    public void operation() {
        //叶子构件具体业务方法的实现
        System.out.println("获取到叶子结点内容:"+text);
    }

}
  1. Test:
public class Test {
    
    public static void main(String[] args) {
        Component component1,component2;
        component1=new Composite("component1");
        component2=new Composite("component2");
        
        Component leaf1,leaf2,leaf3,leaf4;
        leaf1=new Leaf("component1+leaf1");
        leaf2=new Leaf("component1+leaf2");
        leaf3=new Leaf("component2+leaf3");
        leaf4=new Leaf("component2+leaf4");
        
        component1.add(leaf1);
        component1.add(leaf2);
        component2.add(leaf3);
        component2.add(leaf4);
        
        component1.operation();
        component2.operation();
    }

}

运行内容:

获取到构件内容:component1
获取到叶子结点内容:component1+leaf1
获取到叶子结点内容:component1+leaf2
获取到构件内容:component2
获取到叶子结点内容:component2+leaf3
获取到叶子结点内容:component2+leaf4

相关文章

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

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

  • java设计模式08(组合模式)

    组合模式用于组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合...

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

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

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

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

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

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

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

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

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

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

  • Java设计模式 - 组合模式

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

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

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

  • java设计模式 - 组合模式

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

网友评论

      本文标题:java设计模式08(组合模式)

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