组合模式
组合模式指将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式实现起来比较简单,和数据结构“树”很像,只不过叶子节点和非叶子节点都实现了同样的功能,保证了所有节点的行为具有一致性。
组合模式示例代码
下面代码我们实现一个简单的组合模式。

Component.java
public interface Component {
public void add(Component component);
public void remove(Component component);
public void method();
}
Composite.java
public class Composite implements Component {
private List<Component> components = new ArrayList<>();
@Override
public void add(Component component) {
this.components.add(component);
}
@Override
public void remove(Component component) {
this.components.remove(component);
}
@Override
public void method() {
System.out.println("composite");
}
}
Leaf.java
public class Leaf implements Component {
@Override
public void add(Component component) {
}
@Override
public void remove(Component component) {
}
@Override
public void method() {
System.out.println("leaf");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Component root = new Composite();
Component leafA = new Leaf();
Component leafB = new Leaf();
root.add(leafA);
root.add(leafB);
}
}
上述代码中,Leaf是叶子节点,Composite则是非叶子节点,但是它们都实现了同样的Component接口,因此可以定义相同的行为。
透明方式
虽然Leaf也具有add()和remove()方法但是并没有实现,因为叶子节点也实现了统一的Component接口,这叫做透明方式。透明方式保证了所有节点具有一致的行为,缺点就是Leaf实现了两个无意义的方法。我们也可以把add()和remove()单独放在Composite中,或者统一抽象成另一个接口,具体视需求灵活调整。
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。