JAVA中的装饰者模式主要使用了继承与多态来实现。
******************************************************抽像类******************************************************
package com.ckinghan.extend;
public abstract class Writer {
public abstract void writerFile();
}
******************************************************继承类******************************************************
package com.ckinghan.extend;
public class TxtWriter extends Writer {
@Override
public void writerFile() {
System.out.println("写入txt文件");
}
}
******************************************************继承类******************************************************
package com.ckinghan.extend;
public class Mp3Writer extends Writer {
@Override
public void writerFile() {
System.out.println("写入MP3文件");
}
}
******************************************************继承类******************************************************
package com.ckinghan.extend;
public class AviWriter extends Writer {
@Override
public void writerFile() {
System.out.println("写入AVI视频文件");
}
}
******************************************************装饰模式******************************************************
package com.ckinghan.extend;
//继承writer抽象类
public class BufferedWriterFile extends Writer {
private Writer wr;
//构造方法中,传递Writer实体类,但writer是抽象的,不能实例化,所以只能传送它的子类
public BufferedWriterFile(Writer writer){
this.wr = writer;
}
@Override
public void writerFile() {
bufferedWriter();
wr.writerFile();
}
public void bufferedWriter(){
System.out.println("开启高速缓存模式");
}
}
******************************************************测试代码******************************************************
package com.ckinghan.extend;
public class Client {
public static void main(String[] args) {
Writer writer = new BufferedWriterFile(new AviWriter() );
Writer writer2 = new BufferedWriterFile(new Mp3Writer());
Writer writer3 = new BufferedWriterFile(new TxtWriter());
writer.writerFile();
writer2.writerFile();
writer3.writerFile();
}
}
------------------------------------------------------执行结果------------------------------------------------------
开启高速缓存模式
写入AVI视频文件
开启高速缓存模式
写入MP3文件
开启高速缓存模式
写入txt文件