组合模式

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组成的,但是对于图书馆的管理员这些都是没什么区别的。

posted @ 2015-10-06 19:45  √珞珈搬砖工√  阅读(70)  评论(0)    收藏  举报