Composite模式
?
package composite_tree;import java.util.ArrayList;public abstract class Component {public String name;public ArrayList<Component> list;public abstract void add(Component component);public abstract void remove(Component component);public abstract void display();public Component(final String _name) {this.name = _name;}}
?
package composite_tree;public class Leaf extends Component {public Leaf(String _name) {super(_name);}@Overridepublic void add(Component component) {System.out.println("you can't add component to a Leaf object");}@Overridepublic void remove(Component component) {System.out.println("you can't remove component to a Leaf object");}@Overridepublic void display() {System.out.println("|--" + name);}}
?
package composite_tree;import java.util.ArrayList;public class ConcreteComponent extends Component {public ConcreteComponent(String _name){super(_name);list=new ArrayList<Component>();}@Overridepublic void add(Component component) {list.add(component);}@Overridepublic void remove(Component component) {if(list.contains(component)){list.remove(component);}}@Overridepublic void display() {System.out.println(this.name);for(Component mc:list){mc.display();}}}
?
package composite_tree;public class Client {public static void main(String[] args) {Leaf leaf = new Leaf("计算机学院");Leaf leaf2 = new Leaf("文学院");//创建一级分类ConcreteComponent con = new ConcreteComponent("院系");con.add(leaf);con.add(leaf2);Leaf leaf3 = new Leaf("学生会");Leaf leaf4 = new Leaf("团总支");//创建一级分类ConcreteComponent con2 = new ConcreteComponent("校团委");con2.add(leaf3);con2.add(leaf4);Leaf leaf5 = new Leaf("报社");Leaf leaf6 = new Leaf("外联部");//创建二级分类ConcreteComponent secondcon = new ConcreteComponent("学生会");secondcon.add(leaf5);secondcon.add(leaf6);//在一级分类(校团委)下添加二级分类学生会con2.add(secondcon);//将所有的分类添加到root下ConcreteComponent root = new ConcreteComponent("root");root.add(con);root.add(con2);//显示节目列表root.display();}}
?
结果:
root院系|--计算机学院|--文学院校团委|--学生会|--团总支学生会|--报社|--外联部?
?