合成模式Composite(安全式的合成模式)

合成模式Composite(安全式的合成模式)

/**
 * 抽象构件角色
 * @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));
	}
	
//	运行结果
//	校长    孔子
//	老师    张三
//	学生    小明
//	学生    小红
//	老师    李四
//	学生    小刚
//	学生    小林

}

猜你喜欢

转载自injavawetrust.iteye.com/blog/2310777