1, 什么是装饰器
1.1 装饰针对的是某一对象, 它不会改变事物的本质, 比如一个人买了一顶帽子, 它本质还是一个人
1.2 比如一个Date 对象, 它本质还是一个Object, 这个太抽象了奥, = _ =
1.3 装饰器也可以实现增强本质事物, 也可以只在表面做一些花里胡哨的事
1.4 这个模式和桥接模式不同的就是, 装饰者和被装饰者是同一个抽象
1.5 我觉得我们学习技术不一定全部都是为了面试, 还是靠注重解决问题, 更好解决我们可能遇到的问题
2, 案例
public interface Operand {
void upload(String file);
}
// 被装饰者
public class OperandA implements Operand{
@Override
public void upload(String file) {
System.out.println("我是OperandA, 上传文件:" + file);
try {
Thread.sleep(30);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 装饰者
public class OperandAPlus implements Operand{
private Operand operand;
public OperandAPlus(Operand operand) {
this.operand = operand;
}
@Override
public void upload(String file) {
System.out.println("这里可以打日志, 也可以做其他的");
System.out.println("操作开始时间" + System.currentTimeMillis());
operand.upload(file);
System.out.println("操作结束时间" + System.currentTimeMillis());
}
}
public class Main {
public static void main(String[] args) {
Operand operand = new OperandAPlus(new OperandA());
operand.upload("a.png");
}
}
//===================================
这里可以打日志, 也可以做其他的
操作开始时间1599184513041
我是OperandA, 上传文件:a.png
操作结束时间1599184513073
Process finished with exit code 0