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

  • 相关阅读:
    lufylegendRPG游戏引擎 Yorhom's Game Box
    讨论交流 Yorhom's Game Box
    货币之间的大小写转换
    Unreal3的D3D渲染器部分
    Linxu宿主目录
    用于主题检测的临时日志(b25e234297d442ccba394dd2241308d2 3bfe001a32de4114a6b44005b770f6d7)
    Linux命令 文件命名规则 基础
    C#_GDI_文章粗略整合
    由IDisposable接口导致的using使用 以及using的其他用法
    ADO.NET基础备忘1_SqlConnection SqlCommand SqlDataReader
  • 原文地址:https://www.cnblogs.com/xiaowazi/p/9085002.html
Copyright © 2011-2022 走看看