1.模式定义:在不改变原有对象的基础上,将功能附加到对象上

  1. interface Phone{ //定义一个手机接口
  2. void operation(); //定义拍照操作功能接口
  3. }
  4. class HuaWeiP30 implements Phone{ //华为P30实现了手机拍照
  5. @Override
  6. public void operation() {
  7. System.out.println("拍照。。。");
  8. }
  9. }
  10. abstract class Decorator implements Phone{ //定义装饰
  11. Phone component;
  12. public Decorator(Phone component) {
  13. this.component = component;
  14. }
  15. }
  16. class MeiYan extends Decorator{ //添加美颜功能
  17. public MeiYan(Phone component) {
  18. super(component);
  19. }
  20. @Override
  21. public void operation() {
  22. component.operation();
  23. System.out.println("美颜...");
  24. }
  25. }
  26. class LvJin extends Decorator{ //添加滤镜功能
  27. public LvJin(Phone component) {
  28. super(component);
  29. }
  30. @Override
  31. public void operation() {
  32. component.operation();
  33. System.out.println("滤镜...");
  34. }
  35. }
  36. public class DecoratorTest {
  37. public static void main(String[] args) {
  38. Phone component = new LvJin(new MeiYan(new HuaWeiP30()));
  39. component.operation();
  40. }
  41. }

image.png
应用场景:
扩展一个类的功能或给一个类添加附加职责

优点:
1.不改变原有对象的情况下给一个对象扩展功能
2.使用不同的组合可以实现不同的效果
3.符合开闭原则

经典案例
1ServletApi:
2javax.servlet.http.HttpServletRequestWrapper
3javax.servlet.http.HttpServletResponseWrapper