zoukankan      html  css  js  c++  java
  • 静态代理和装饰者模式的区别

    静态代理是一种编译期增强,还没运行就已经知道增强的目标对象。

    装饰者是运行时增强,只有运行时才知道具体增强的目标。

    • Code show time 

      静态代理:

    package com.zjt.test;
    
    interface Duck {
        void swim();
    }
    
    class DuckImpl implements Duck{
        @Override
        public void swim() {
            System.out.println("小鸭子会游泳");
        }
    }
    
    class ProxyDuck implements Duck{
        Duck duck;
       //一个空的构造函数,且代理类中明确声明需要代理的目标对象 public ProxyDuck(){ this.duck=new DuckImpl(); } @Override public void swim() { System.out.println("噶嘎嘎。。。"); duck.swim(); } } class Test{ public static void main(String[] args) { Duck duck = new ProxyDuck(); duck.swim(); } }

      装饰者模式:

    package com.zjt.test;
    
    public interface Duck {
        void swim();
    }
    class DuckImpl implements Duck{
    
        @Override
        public void swim() {
            System.out.println("swim....");
        }
    }
    
    class Director implements Duck{
        Duck duck;
        //编译期不知道具体的目标对象,只有运行期调用者手动传入才知道
        public Director(Duck duck){
          this.duck=duck;
        }
    
        @Override
        public void swim() {
            System.out.println("gagaga.....1");
            duck.swim();
            System.out.println("gagaga.....2");
        }
    }
    
    
    class Test{
        public static void main(String[] args) {
            Duck duck = new Director(new DuckImpl());
            duck.swim();
        }
    }
    

      

  • 相关阅读:
    Android 之 Intent(意图)
    初识 Android
    SSM + VUE 实现简单的 CRUD
    VueUI -- iView4.0简单使用
    axios解决跨域问题(vue-cli3.0)
    Mybatis 逆向工程
    获取input type=file 的文件内容(纯文本)
    vue常见问题处理 -- 页面刷新时,如何保持原有vuex中的state信息
    mysql安装、使用 -- windows
    vue关于mock的简单使用
  • 原文地址:https://www.cnblogs.com/zjting/p/12547092.html
Copyright © 2011-2022 走看看