抽象出一个父类 定义抽象方法
public abstract class Reader_ {//所有人的父类
public abstract void read();
}
——————————————————————————————————
FileReader.子类继承父类 重写抽象方法
public class FIleReader extends Reader_ { //节点流 针对某一个数据源(节点)进行操作
File file;//针对文件这种数据源
String s;
public FIleReader() {
}
public FIleReader(File file) {
this.file = file;
}
public FIleReader(String s) {
this.s = s;
}
@Override
public void read() {
System.out.println("这里是对文件的操作");
}
}
——————————————————————————————————
现在想对FileReader方法进行增强(装饰),在不修改源码的情况下去定义一个装饰类
装饰类封装一个父类对象!!!
public class BufferedReader_ extends Reader_{
private Reader_ reader_;//封装一个Reader类型的对象
@Override
public void read() {
System.out.println("这里是包装流的read()方法");
}
public BufferedReader_(Reader_ reader_) {
this.reader_ = reader_;
}
public void readlotsoffile(int nums){
for(int i =0;i<nums;i++){
reader_.read();//通过动态绑定
}
}
}——————————————————————————————————
测试类:
public class text {
public static void main(String[] args) {
BufferedReader_ bufferedReader_ = new BufferedReader_(new FIleReader());
bufferedReader_.read();
bufferedReader_.readlotsoffile(20);
}
}
//输出结果如下
整体来看:我们写了个装饰类 里面封装父类的属性
创建装饰类对象时,通过构造器 初始化成员变量,传参的时候传入还没有装饰(FIleReader)的对象,该装饰器对象的成员变量(Reader_ Reader_)指向还没有装饰(FIleReader)的对象,因为调用方法看运行类型,所以在装饰器类中,通过Reader_.read()可以调用未装饰的FileReader的方法
本例中 我对