装饰者模式

动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则。

动态的给一个对象添加一些额外的功能,就增加功能来说,装饰模式比生成子类更为灵活。

实现

  1. // 声明一个机器人接口,定义一个方法
  2. interface Robot{
  3. void doSomething();
  4. }
  5. // 被装饰的类
  6. class FirstRobot implements Robot{
  7. @Override
  8. // 第一代机器人
  9. public void doSomething() {
  10. System.out.println("第一代机器人会唱歌");
  11. System.out.println("第一代机器人会对话");
  12. }
  13. }
  14. class RobotDecorator implements Robot{
  15. private Robot robot;
  16. // 使用构造方法传一个机器人对象就行了
  17. public RobotDecorator(Robot robot) {
  18. this.robot = robot;
  19. }
  20. @Override
  21. public void doSomething() {
  22. robot.doSomething();
  23. }
  24. /**
  25. * 这个方法就是可以做第一代机器人做的事
  26. * 同时还有新添加的功能
  27. */
  28. public void doMoreThing(){
  29. robot.doSomething();
  30. System.out.println("第二代机器人还会跳舞");
  31. }
  32. }
  33. public static void main(String[] args) {
  34. // new 一个装饰器类,传入需要装饰的对象就行了
  35. new RobotDecorator(new FirstRobot()).doMoreThing();
  36. }