您的位置:首页 > 其它

讲故事学设计模式-合成(Composite)模式

2014-03-09 22:47 519 查看
合成模式相对简单,但是它却被广泛设计者使用,例如SWT,Eclipse等等。它主要是构建一棵树,并且可以通过一个统一的方法访问这棵树。

1、类图



我们将实现如下树结构,请看源代码。



2、代码

import java.util.List;
import java.util.ArrayList;

//Component
interface Component {
public void show();
}

//Composite
class Composite implements Component {

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

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

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

@Override
public void show() {
for (Component component : childComponents) {
component.show();
}
}
}

//leaf
class Leaf implements Component {
String name;
public Leaf(String s){
name = s;
}
public void show() {
System.out.println(name);
}
}

public class CompositeTest {

public static void main(String[] args) {
Leaf leaf1 = new Leaf("1");
Leaf leaf2 = new Leaf("2");
Leaf leaf3 = new Leaf("3");
Leaf leaf4 = new Leaf("4");
Leaf leaf5 = new Leaf("5");

Composite composite1 = new Composite();
composite1.add(leaf1);
composite1.add(leaf2);

Composite composite2 = new Composite();
composite2.add(leaf3);
composite2.add(leaf4);
composite2.add(leaf5);

composite1.add(composite2);
composite1.show();
}
}

3、附加

     其实我们有一个很符合Composite模式的故事。小时候奶奶跟我讲:从前有座山,山里有座庙,庙里有个老和尚(应该是道士)和小和尚。有一天老和尚对小和尚说,“从前有座山,山里有座庙……”。显然老外是没听说过了。
    上面所提到的是Composite的安全模式,它还有一种透明模式。透明模式与安全模式的却别在于将add()和remove()上提至IComposite处,这样所有叶子节点与合成类拥有同样的接口,操作单一。但明显add()和remove()不应该出现在叶子上,虽然能通过编译,但运行期极易出错,请大家根据实际情况取舍。

原文链接:http://www.programcreek.com/2013/02/java-design-pattern-composite/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 Composite