组合模式
public class CompositePattern { public interface StudentImpl{ abstract public void study(); abstract public int size(); abstract public String name(); } public class StudentInstance implements StudentImpl{ String name ; public StudentInstance(String name) { super(); this.name = name; } public void study() { System.out.println(name() + " is studying..."); } public int size(){ return 1; } public String name(){ return name; } } public class StudentGroup implements StudentImpl{ List<StudentImpl> list = new ArrayList<StudentImpl>(); String name ; public StudentGroup(String name,List<StudentImpl> list ) { super(); this.list = list; this.name = name; } public void study() { for(int i=0;i<list.size();i++) list.get(i).study(); } public String name(){ return name; } public int size(){ return list.size(); } } public class StudentLibary { public void serivce(StudentImpl student){ System.out.println("图书馆为<" + student.name() + ">安排[" + student.size() + "]个座位."); student.study(); } } public void test(){ StudentImpl student1 = new StudentInstance("小明"); ArrayList<StudentImpl> list = new ArrayList<StudentImpl>(); list.add(new StudentInstance("小王")); list.add(new StudentInstance("小李")); list.add(new StudentInstance("小张")); list.add(new StudentInstance("小唐")); StudentImpl student2 = new StudentGroup("自强学会",list); StudentLibary lib = new StudentLibary(); lib.serivce(student1); lib.serivce(student2); } public static void main(String[] args) { new CompositePattern().test(); } }

首先对学生图书馆来说,来一个学生和来一个学生团体并没有什么区别,都是一样的服务,就好像我们去餐馆吃自助,一个人吃和多个人吃都是排一个号,然后排到自己号的时候,一个人吃的时候就进去一个,一堆人吃的时候就进去一堆,然后学生团体也是由学生组成,所以里面肯定有一个list来保存,然后都有name.都有size,不同的是单个学生的name就是姓名,而一个学生团体的name就是学生团体的称号,而size肯定也会不一样。总之StudentGroup是由StudentInstance组成的,但是对于图书馆的管理员这些都是没什么区别的。

浙公网安备 33010602011771号