zoukankan      html  css  js  c++  java
  • 装饰者模式

    我编写了如下代码希望能对大家理解装饰者有更好的帮助
    public interface Car {
        void run();// 车跑的方法
        void stop();//停车
        int oilTank();//油箱大小
        void driver(String driverName);//谁开的
        
    }

    //一辆QQ车
    public class QQ implements Car{

        @Override
        public void run() {
            try {
                Thread.sleep(1000);
                System.out.println("qq完成百公里加速");
            } catch (Exception e) {
            }
        }

        @Override
        public void stop() {
            System.out.println("qq刹车了");
        }

        @Override
        public int oilTank() {
            return 50;
        }

        @Override
        public void driver(String driverName) {
            System.out.println(driverName+"正在驾驶qq");
        }
    }
    我们在这里做个测试类 


    public class CarTest {
        public static void main(String[] args) {
            QQ qq = new QQ();
            qq.run();

    //输出QQ完成百公里加速

    //那么我想要QQ车增加一些其他功能 比如百公里加速的时间  加个 汽车尾翼等
        }
    }

    接下来我要再定义一个QQWrapper 类实现Car接口在加上QQ车百公里加速的功能

    public class QQWrapper implements Car {
        private Car qq;

    加强对象持有原有对象的引用
        
        public QQWrapper(Car qq) {
            super();
            this.qq = qq;
        }

        @Override
        public void run() {
            long start = System.currentTimeMillis();
            qq.run();
            long end = System.currentTimeMillis();
            System.out.println("百公里加速用时"+(end-start));

      需要加强的方法 加强我需要的逻辑  

      不需要加强的方法 实现我原来的逻辑
        }

        @Override
        public void stop() {
            qq.stop();
        }

        @Override
        public int oilTank() {
            return qq.oilTank();
        }

        @Override
        public void driver(String driverName) {
            qq.driver(driverName);
        }

    }

    QQWrapper qqWrapper = new QQWrapper(qq);

    把原有qq对象 给qqWrapper 让他跑一下
            qqWrapper.run();

    //输出QQ完成百公里加速

    百公里加速用时1001

  • 相关阅读:
    java反射系七之动态代理
    java反射系列六之调用属性与方法
    java反射系列五之获取类的完整结构
    java反射系列四之创建运行时类的对象
    java反射系列三之类加载器
    java反射系列二
    java反射系列一
    数据类型
    类的加载、连接和初始化
    算法
  • 原文地址:https://www.cnblogs.com/xiaowazi/p/9085002.html
Copyright © 2011-2022 走看看