特点
组合模式主要用于层次结构比较明显的对象创建,如树结构、树形菜单、文件管理等。属于结构型模式。
代码
针对按钮实现父级按钮和子集按钮展示。
按钮类
public class Button {
private int id;
private String name;
private List<Button> subButtons;
private int level;
public Button(int id, String name,int level) {
this.id = id;
this.name = name;
this.level = level;
subButtons = new ArrayList<>();
}
public Button addSubButton(Button button){
this.subButtons.add(button);
return this;
}
// 展示数据
public static void show(Button button){
System.out.println(space(button));
if (!button.subButtons.isEmpty()){
for (int i = 0; i < button.subButtons.size(); i++) {
show(button.subButtons.get(i));
}
}
}
private static String space(Button button){
String space = "";
for (int i = 0; i < button.level; i++) {
space = space.concat(" ");
}
return space.concat(String.valueOf(button.id)).concat("-").concat(button.name);
}
}
测试代码
@Test
public void testAssembly(){
// 创建跟节点
Button button = new Button(1, "中国",0);
// 子节点1
Button subButton1 = new Button(2, "湖北",1);
// 子节点1的子节点 1-1
Button subButton11 = new Button(4, "武汉", 2);
// 3级子节点
Button subButton111 = new Button(8, "洪山区", 3);
Button subButton112 = new Button(9, "青山区", 3);
// 将3级子节点加入
subButton11.addSubButton(subButton111)
.addSubButton(subButton112);
// 子节点1的子节点 1-2
Button subButton12 = new Button(5, "仙桃", 2);
// 将节点加入
subButton1.addSubButton(subButton11)
.addSubButton(subButton12);
// 子节点2
Button subButton2 = new Button(3, "湖南",1);
Button subButton21 = new Button(6, "长沙", 2);
Button subButton22 = new Button(7, "常德", 2);
subButton2.addSubButton(subButton21)
.addSubButton(subButton22);
button.addSubButton(subButton1)
.addSubButton(subButton2);
Button.show(button);
}
测试结果
1-中国
2-湖北
4-武汉
8-洪山区
9-青山区
5-仙桃
3-湖南
6-长沙
7-常德