/**
* 抽象构件角色
* @author InJavaWeTrust
*
*/
public abstract class Role {
private String role;
private String name;
public Role(String role, String name) {
this.role = role;
this.name = name;
}
public String getInfo() {
return this.role + " " + this.name;
}
}
import java.util.Vector;
/**
* 树枝构件角色
* @author InJavaWeTrust
*
*/
public class Teacher extends Role {
private Vector<Role> vec =new Vector<Role>();
public Teacher(String role, String name) {
super(role, name);
}
public void addRole(Role role) {
vec.addElement(role);
}
public Vector<Role> getRole() {
return vec;
}
}
/**
* 树叶构件角色
* @author InJavaWeTrust
*
*/
public class Student extends Role {
public Student(String role, String name) {
super(role, name);
}
}
import java.util.Vector;
/**
* 测试类
* @author InJavaWeTrust
*
*/
public class TestComposite {
/**
* 构件角色树
* @return 构件角色树
*/
private static Teacher roleTree() {
Teacher root = new Teacher("校长", "孔子");
Teacher ter1 = new Teacher("老师", "张三");
Teacher ter2 = new Teacher("老师", "李四");
Student sdt1 = new Student("学生", "小明");
Student sdt2 = new Student("学生", "小红");
Student sdt3 = new Student("学生", "小刚");
Student sdt4 = new Student("学生", "小林");
root.addRole(ter1);
root.addRole(ter2);
ter1.addRole(sdt1);
ter1.addRole(sdt2);
ter2.addRole(sdt3);
ter2.addRole(sdt4);
return root;
}
/**
* 遍历角色树
* @param root
* @return
*/
private static String getRoleTree(Teacher root) {
Vector<Role> vec = root.getRole();
String s = "";
for (Role role : vec) {
if (role instanceof Student) {
s = s + role.getInfo() + "\n";
} else {
s = s + role.getInfo() + "\n" + getRoleTree((Teacher) role);
}
}
return s;
}
public static void main(String[] args) {
Teacher root = roleTree();
System.out.println(root.getInfo());
System.out.println(getRoleTree(root));
}
// 运行结果
// 校长 孔子
// 老师 张三
// 学生 小明
// 学生 小红
// 老师 李四
// 学生 小刚
// 学生 小林
}