public class DecoratePattern {
/**
* 装饰类的好处:相比继承而言减少了代码的耦合性(继承父类改变子类也要相应的做出改变)
*
* 装饰类的满足条件:1、在装饰类中要获取被装饰类的引用 private Student student 2、在装饰类中的构造函数中加入被装饰类的对象
*/
public static void main(String[] args) {
Teacher teacher = new Teacher(new Student());
teacher.study();
}
}
interface Study {
public void study();
}
//被装饰的类
class Student implements Study {
@Override
public void study() {
System.out.println("1");
System.out.println("2");
}
}
//装饰类
class Teacher implements Study {
private Student student;
public Teacher(Student student) {
this.student = student;
}
@Override
public void study() {
student.study();
System.out.println("3");
System.out.println("4");
}
/**
* 装饰类的好处:相比继承而言减少了代码的耦合性(继承父类改变子类也要相应的做出改变)
*
* 装饰类的满足条件:1、在装饰类中要获取被装饰类的引用 private Student student 2、在装饰类中的构造函数中加入被装饰类的对象
*/
public static void main(String[] args) {
Teacher teacher = new Teacher(new Student());
teacher.study();
}
}
interface Study {
public void study();
}
//被装饰的类
class Student implements Study {
@Override
public void study() {
System.out.println("1");
System.out.println("2");
}
}
//装饰类
class Teacher implements Study {
private Student student;
public Teacher(Student student) {
this.student = student;
}
@Override
public void study() {
student.study();
System.out.println("3");
System.out.println("4");
}
}
装饰类的常见应用为BufferReader BufferInputStream 等缓存流里。