在数据结构中,有树这么一种结构,转换到设计模式中就是组合模式。组合模式的作用就是以统一的方式处理一组具有树形结构的对象。最典型的例子就是菜单项了,一个菜单下可能包括多个菜单项,每个菜单项都可能包含其他子菜单。
下面我们来实现菜单项。由于每个菜单项可能包含其他菜单项,所以我们需要一个列表来保存可能的菜单项。
public class MenuItem {
private List<MenuItem> subMenu;
private String name;
public MenuItem(String name) {
this.name = name;
subMenu = new ArrayList<>();
}
public void addMenuItem(MenuItem item) {
subMenu.add(item);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<MenuItem> getSubMenu() {
return subMenu;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(name).append("\n");
for (MenuItem item : subMenu) {
sb.append(" " + item);
}
return sb.toString();
}
}
之后我们用一个例子来测试一下。
public void run() {
MenuItem mainMenu = new MenuItem("主菜单");
MenuItem subItem1 = new MenuItem("子菜单项1");
MenuItem subItem2 = new MenuItem("子菜单项2");
mainMenu.addMenuItem(subItem1);
mainMenu.addMenuItem(subItem2);
System.out.println(mainMenu);
}
结果类似下面。
主菜单
子菜单项1
子菜单项2
组合模式的优点是我们可以只用一个类就可以访问结构化的整个数据。