设计模式学习(十七)组合模式

介绍

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

类图说明

在这里插入图片描述
类图描述如下:
Component类:定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性,本类图中定义一个共有的方法doSomething()。
Leaf类:叶子对象,其下再也没有其他的分支,也就是遍历的最小单位,实现doSomething()方法即可。
Composite类:树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。本类图中定义add()和remove()以及getChild()方法。
CompositePattern类:定义调用对象。

代码示例

文件结构如下:
在这里插入图片描述
代码示例如下:

public abstract class Component {
    
    
      public void doSomething(){
    
    

      }
}
public class Leaf extends Component {
    
    
    @Override
    public void doSomething() {
    
    
        System.out.println("i am a leaf");
    }
}
public class Composite extends Component {
    
    

    private List<Component> list = new ArrayList<>();

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

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

    public List<Component> getChild(){
    
    
        return this.list;
    }

    @Override
    public void doSomething() {
    
    
        System.out.println("i am composite");
    }
}
public class CompositePattern {
    
    
    public static void main(String[] args) {
    
    
        Composite composite = new Composite();
        Leaf leaf = new Leaf();
        composite.add(leaf);
        composite.add(leaf);

        composite.doSomething();
        for (Component c:composite.getChild()) {
    
    
            c.doSomething();
        }

    }
}

运行结果如下:
在这里插入图片描述

应用场景

部分、整体场景,如树形菜单,文件、文件夹的管理

优缺点

优点

  • 高层模块调用简单
  • 节点自由增加

缺点

  • 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则

Guess you like

Origin blog.csdn.net/he_cha_bu/article/details/116401036