?
import java.util.Vector; /** * 抽象构件角色 * @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; } public abstract void addRole(Role role); public abstract Vector<Role> getRole(); }
?
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); } @Override public void addRole(Role role) { vec.addElement(role); } @Override public Vector<Role> getRole() { return vec; } }
?
import java.util.Vector; /** * 树叶构件角色 * @author InJavaWeTrust * */ public class Student extends Role { public Student(String role, String name) { super(role, name); } @Override public void addRole(Role role) { } @Override public Vector<Role> getRole() { return null; } }
?
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)); } // 运行结果 // 校长 孔子 // 老师 张三 // 学生 小明 // 学生 小红 // 老师 李四 // 学生 小刚 // 学生 小林 }
?
原文:http://injavawetrust.iteye.com/blog/2310774