• 装饰者模式


    我编写了如下代码希望能对大家理解装饰者有更好的帮助
    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

  • 相关阅读:
    小知识:关于String的创建
    JSON学习笔记,数组
    JSON学习笔记,对象
    爱乐之城 La La Land
    TwoSampleMR包出现报错: None of the specified columns present
    无亲缘关系为何IBD结果为同卵双胞胎/重复样本
    本周最新文献速递20210321
    本周最新文献速递20210314
    使用 KaKs Calculator 计算 KaKs 的衍生问题解答
    本周最新文献速递20210307
  • 原文地址:https://www.cnblogs.com/xiaowazi/p/9085002.html
Copyright © 2020-2023  润新知