A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. * 装饰者设计模式的经典案例GoogleCar:需求:希望将GoogleCar的接入到生态圈平台,增强里面的相关功能
  2. * 使用场景:二次开发的时候,拿不到源码,无法使用继承条件下,要对已经存在对象上的功能进行增强
  3. * 前提:一定要拿到被装饰对象实现的所有接口
  4. * 实现:自定义实现一个装饰类,实现相关的接口,为自定义装饰类传入被装饰类的对象
  5. * 弊端:如果被实现的接口太多的话,装饰类中的方法过多冗余


  6. /**
  7. * @author NOT ME
  8. * @description 定义一个汽车接口规范
  9. * @create 2018/11/8 0008上午 10:58
  10. */
  11. public interface ICar {

  12.     /**
  13.      * @description 实现类只需要覆盖重写该该方法就可以启动汽车
  14.      * @Date: 2018/11/8 0008 上午 10:58
  15.      */
  16.     void start();

  17.     /**
  18.      * @description 实现类只需要覆盖重写该方法就可以运行汽车
  19.      * @Date: 2018/11/8 0008 上午 11:00
  20.      */
  21.     void run();

  22.     /**
  23.      * @description 实现类只需要覆盖重写该方法就可以停止汽车
  24.      * @Date: 2018/11/8 0008 上午 11:01
  25.      */
  26.     void stop();
  27. }


  28. /**
  29. * @author NOT ME
  30. * @description GoogleCar类实现了ICar这个接口,覆盖重写了所有的方法,在方法里面定义了谷歌Car的一系列操作汽车的方法
  31. *              那么会把类设置成final类型,不能被其他的类继承,不能重写里面的方法,否则会造成隐患。
  32. *              只能拿到jar包,也就是编译过后的字节码文件。
  33. * @create 2018/11/8 0008上午 11:02
  34. */
  35. public final class GoogleCar implements ICar {

  36.     @Override
  37.     public void start() {
  38.         System.out.println("汽车启动了");
  39.     }

  40.     @Override
  41.     public void run() {
  42.         System.out.println("汽车运行了");
  43.     }

  44.     @Override
  45.     public void stop() {
  46.         System.out.println("汽车停止了");
  47.     }
  48. }


  49. /**
  50. * @author NOT ME
  51. * @description 定义一个MyCar类实现了ICar接口
  52. * @create 2018/11/8 0008上午 11:08
  53. */
  54. public class MyCar implements ICar {
  55.     ICar car;

  56.     /**
  57.      * @description 在创建对象的同时,需要把GoogleCar的对象也传进来,通过GoogleCar的对象调用GoogleCar的方法
  58.      * @Date: 2018/11/8 0008 上午 11:21
  59.      */
  60.     public MyCar(ICar car) {
  61.         this.car = car;
  62.     }

  63.     @Override
  64.     public void start() {
  65.         // 下面两行代码是增强的方法
  66.         System.out.println("今天天气良好");
  67.         System.out.println("今天道路稍微有点堵塞,但是不影响通行");

  68.         // 下面一行代码是GoogleCar的原方法,没有发生任何改变
  69.         car.start();
  70.     }

  71.     @Override
  72.     public void run() {
  73.         car.run();
  74.     }

  75.     @Override
  76.     public void stop() {
  77.         car.stop();
  78.     }
  79. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马