在学习IO流的时候,使用底层的基础的输入输出流(InputStream/OutputStream和Reader/Writer)进行读写操作的时候,我们一般会使用BufferInputStream/BufferOutputStream和BufferReader/BufferWriter进行包装。
public class Test{
public static void main(String[ ] args){
GoodStudent gs = new GoodStudent(new Student( ) ); //创建一个装饰类的对象
gs.code( ); // 调用装饰类的方法
}
public void code();
}
// 一个被装饰的类Student
class Student implements Coder {
@Override
public void code() {
System.out.println("javase");
System.out.println("javaweb");
}
}
// 这个类是要对Student类进行装饰的一个类GoodStudent
class GoodStudent implements Coder {
private Student s; //1.获取到被包装的类的引用
public GoodStudent(Student s) { //2.通过构造函数创建对象的时候,传入被包装的对象
this.s = s;
}
@Override
public void code() { //3.对其原有功能进行升级
s.code();
System.out.println("数据库");
System.out.println("ssh");
System.out.println("安卓");
System.out.println(".....");
}
}
}
装饰设计模式的好处是:
耦合性不强,被装饰的类的变化与装饰类的变化无关