zoukankan      html  css  js  c++  java
  • 设计模式-代理模式

    作为aop的实现技术支持,代理模式应该是最被人熟知的,代理模式用大白话来说,类似一个中介,可以进行方法的增强或者修改(Ps:我觉得静态代理模式和命令模式好像,命令模式也可以在具体命令类里调用接收者前后进行环绕增强,只不过无法修改方法只能进行拓展)

    当我们不方便直接调用一个类的时候 可以使用代理模式,直接看代码吧

    公共特征类

    public interface Animal {
        void eat();
    }

    具体实现类

    public class Dog implements Animal {
        @Override
        public void eat() {
            System.out.println("小狗要吃饭");
        }
    }

    代理类

    public class DogProxy  implements Animal{
       Dog dog;
    
        @Override
        public void eat() {
           //执行之前的操作
            System.out.println("吃饭前的准备");
            dog.eat();
            //执行之后的操作
            System.out.println("吃饭后");
        }
    
        public DogProxy(Dog dog) {
            this.dog = dog;
        }
    
    }

    测试类

    public class Client {
        public static void main(String[] args) {
            new DogProxy(new Dog()).eat();
        }
    }

    这种代理模式的缺点就是 每增加一个具体实现类 都要增加一个代理类,这种代理也叫静态代理,是一种在编译期就确定好的代理方式

    还有另一种通过反射来进行代理的方式,叫动态代理。这两种代理方式都需要被代理类实现接口,代理类实现与代理类的统一接口以便修改方法。还有另一种技术字节码代理,常见的有cglib和asm。

    代理类的核心就是创建代理类代理原类进行执行,因为实现了同一接口可以更方便的修改和增强。

    不和别人一样,不复制只真正理解
  • 相关阅读:
    SSL工作原理
    xmlhttprequest对象
    form验证的图片(小技巧)
    C#转码
    引用不了App_Code里的类
    再谈如何成为技术领袖
    如何做好年末总结?
    编程习惯
    软件人员推荐书目(都是国外经典书籍!!!)
    又当爹又当妈的产品经理
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12784937.html
Copyright © 2011-2022 走看看