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{@Overridepublic 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;}@Overridepublic 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
操作结束时间1599184513073Process finished with exit code 0