app模板网站,幻影图片一键制作网站,虚拟云主机wordpress必攻击,thinkphp网站开发目录 一、背景介绍二、思路方案三、过程1.代理模式简介2.代理模式的类图3.代理模式代码4.代理模式还可以优化的地方5.代理模式的项目实战#xff0c;优化后(只加了泛型方式#xff0c;使用CGLIB的代理) 四、总结五、升华 一、背景介绍
最近在做产品过程中对于日志的统一… 目录 一、背景介绍二、思路方案三、过程1.代理模式简介2.代理模式的类图3.代理模式代码4.代理模式还可以优化的地方5.代理模式的项目实战优化后(只加了泛型方式使用CGLIB的代理) 四、总结五、升华 一、背景介绍
最近在做产品过程中对于日志的统一收集做了深入的研究最终映射到代理模式的运用上了通过对代理模式的再探对代理模式的敬畏又进行了一层升华。
二、思路方案
1.代理模式简介2.代理模式的类图3.代理模式代码4.代理模式还可以优化的地方5.代理模式的项目实战优化后
三、过程
1.代理模式简介
代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问
2.代理模式的类图 3.代理模式代码
package com.a7DesignPattern.a2StructuralType.a07Proxy;/*** 功能描述** Authormakang* Date: 2021/5/22 10:02*/
public abstract class Subject {public abstract void Request();
}
package com.a7DesignPattern.a2StructuralType.a07Proxy;/*** 功能描述** Authormakang* Date: 2021/5/22 10:03*/
public class RealSubject extends Subject{Overridepublic void Request() {System.out.println(真实对象);}
}
package com.a7DesignPattern.a2StructuralType.a07Proxy;/*** 功能描述** Authormakang* Date: 2021/5/22 10:04*/
public class Proxy extends Subject{private RealSubject realSubject;Overridepublic void Request() {if(realSubject null){realSubject new RealSubject();}realSubject.Request();}
}
package com.a7DesignPattern.a2StructuralType.a07Proxy;/*** 功能描述** Authormakang* Date: 2021/5/22 10:06*/
public class Client {public static void main(String[] args) {Subject subject new Proxy();subject.Request();}
}
4.代理模式还可以优化的地方
1.通过代理类中使用泛型将被代理对象延迟到运行时定义。2.通过自定义注解或者包扫描的方式将使用端进行一步优化
5.代理模式的项目实战优化后(只加了泛型方式使用CGLIB的代理)
package com.b0032AOP例子_CGLIB动态代理.V1基础例子;public class Calimpl{public int add(int num1, int num2) {return num1 num2;}public int sub(int num1, int num2) {return num1 - num2;}public int mul(int num1, int num2) {return num1 * num2;}public int div(int num1, int num2) {return num1 / num2;}}
package com.b0032AOP例子_CGLIB动态代理.V1基础例子;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;
import java.util.Arrays;public class MyMethodInterceptorT implements MethodInterceptor {public T getBind(Class? object){Enhancer enhancer new Enhancer();enhancer.setSuperclass(object);enhancer.setCallback(new MyMethodInterceptor());return (T)enhancer.create();}Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(method.getName() 方法的参数是 Arrays.toString(objects));Object result methodProxy.invokeSuper(o,objects);System.out.println(method.getName()方法的结果是result);return result;}
}
package com.b0032AOP例子_CGLIB动态代理.V1基础例子;public class Client {public static void main(String[] args) {MyMethodInterceptorCalimpl myMethodInterceptor new MyMethodInterceptor();Calimpl calimplProxy myMethodInterceptor.getBind(Calimpl.class);calimplProxy.add(1,1);calimplProxy.sub(2,2);calimplProxy.mul(3,3);calimplProxy.div(4,4);}
}
四、总结
1.代理模式的思想通过将行为的抽象在运行时进行动态干预使得复用性、灵活性都做到了极大的提高2.将单纯的代理模式通过和泛型的结合使得灵活性再次提升3.后续还可以通过自定义注解或者包扫描的方式进一步优化使用端
五、升华
当你的认知提升一个等级之后再回头看经历过的知识将会获得不一样的认识