妙博客

主机评测 香港服务器 洛杉矶VPS测评

设计模式-JAVA-组合模式(Composite)

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,从而使得用户无需关心对象的具体类型,而只需要关心对象的接口。


下面是一个简单的组合模式的示例:


首先,我们定义一个抽象类 Component,它有一个 add() 方法和一个 remove() 方法,用于添加和删除子组件,还有一个 display() 方法,用于显示组件的信息:


public abstract class Component {
    protected String name;
    public Component(String name) {
        this.name = name;
    }
    public abstract void add(Component component);
    public abstract void remove(Component component);
    public abstract void display();
}

然后,我们定义一个叶子节点类 Leaf,它继承自 Component,表示组合中的叶子节点:

public class Leaf extends Component {
    public Leaf(String name) {
        super(name);
    }
    public void add(Component component) {
        System.out.println("Cannot add to a leaf");
    }
    public void remove(Component component) {
        System.out.println("Cannot remove from a leaf");
    }
    public void display() {
        System.out.println(name);
    }
}

接下来,我们定义一个组合节点类 Composite,它继承自 Component,表示组合中的非叶子节点:

import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
    private List<Component> children = new ArrayList<Component>();
    public Composite(String name) {
        super(name);
    }
    public void add(Component component) {
        children.add(component);
    }
    public void remove(Component component) {
        children.remove(component);
    }
    public void display() {
        System.out.println(name);
        for (Component component : children) {
            component.display();
        }
    }
}

最后,我们可以使用组合模式来创建一个树形结构:

public class CompositePatternDemo {
    public static void main(String[] args) {
        Component root = new Composite("root");
        root.add(new Leaf("Leaf A"));
        root.add(new Leaf("Leaf B"));
        Component comp = new Composite("Composite X");
        comp.add(new Leaf("Leaf XA"));
        comp.add(new Leaf("Leaf XB"));
        root.add(comp);
        Component comp2 = new Composite("Composite Y");
        comp2.add(new Leaf("Leaf YA"));
        comp2.add(new Leaf("Leaf YB"));
        comp.add(comp2);
        root.display();
    }
}


输出结果:

root

Leaf A

Leaf B

Composite X

Leaf XA

Leaf XB

Composite Y

Leaf YA

Leaf YB


JAVA7大原则和23种设计模式汇总,点我查看

Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2