デザインモード=装飾モード(Decorator)


/*
 *     (Decorator)
 *
 *  
 *                   。
 *                     ,            。
 *              ,        。
 */

package model;

public class TestDecorator {
    public static void main(String[] args) {
        Teacher t1 = new SimpleTeacher();
        Teacher t2 = new CppTeacher(t1);
        Teacher t3 = new JavaTeacher(t2);
        t3.teach();
        // t.teach();
    }
}

abstract class Teacher {
    public abstract void teach();
}

class SimpleTeacher extends Teacher {
    public void teach() {
        System.out.println("Good Good Study, Day Day Up");
    }
}

class JavaTeacher extends Teacher {
    Teacher teacher;

    public JavaTeacher(Teacher t) {
        this.teacher = t;
    }

    public void teach() {
        teacher.teach();
        System.out.println("Teach Java");
    }
}

class CppTeacher extends Teacher {
    Teacher teacher;

    public CppTeacher(Teacher t) {
        this.teacher = t;
    }

    public void teach() {
        teacher.teach();
        System.out.println("Teach C++");
    }
}