网站备案期间访问,有哪些好的响应式网站,泰安企业建站公司服务,长沙长沙建设网站什么是代理
在进行操作时有时不希望用户直接接触到目标#xff0c;这时需要使用代理让用户间接接触到目标
给目标对象提供一个代理对象#xff0c;并且由代理对象控制着对目标对象的引用
图解#xff1a; 代理的目的
控制访问#xff1a;通过代理对象的方式间接的访问目…什么是代理
在进行操作时有时不希望用户直接接触到目标这时需要使用代理让用户间接接触到目标
给目标对象提供一个代理对象并且由代理对象控制着对目标对象的引用
图解 代理的目的
控制访问通过代理对象的方式间接的访问目标对象防止直接访问目标对象给系统带来不必要的复杂性
功能增强通过代理业务对原有业务进行增强 静态代理 如下代码是代理实例并且实现控制访问 实现功能增强 静态代理的缺点当目标类增多的时候代理类直接增加代理的目标类会造成代理逻辑混乱 动态代理 package Test20250219DaiLi; public class Test { public static void main(String[] args) { // Proxy proxy new Proxy(); // proxy.clothes(xxxL); ClothesFactory clothesFactory new ClothesFactory(); ByClothes clothes (ByClothes) new DyProxy(clothesFactory).getProxyInterFace(); clothes.clothes(XXXL); ShootFactory shootFactory new ShootFactory(); ByShoot shoot (ByShoot) new DyProxy(shootFactory).getProxyInterFace(); shoot.Shoot(42); } }
package Test20250219DaiLi; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DyProxy implements InvocationHandler { //被代理的对象 //代理对象如何得知自己代理的是哪个目标类 //这里这样写其实是让用户告诉我我要代理谁 private Object o ; public DyProxy(Object o){ this.o o; } //2.获取目标类的接口要知道自己代理的核心方法是啥 public Object getProxyInterFace(){ return Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(),this); } //知道了接口----》变相得知了自己要代理的核心方法: //invoke方法是利用反射的方式获取到了要代理的核心方法 //1.Objectjdk创建的代理类无需赋值 //2.Method目标类当中的方法jdk提供无需赋值 //3.Object[]目标类当中的方法的参数jdk提供无需赋值 Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { FrontService(); method.invoke(o,args); endService(); return null; } //前置服务 public void FrontService() { System.out.println(根据您的需求进行市场调研); } //前置服务 public void endService() { System.out.println(为您提供一条龙的包办服务); } }
package Test20250219DaiLi; public interface ByClothes { public abstract void clothes(String size); }
package Test20250219DaiLi; /** * 卖衣服的工厂 * 目标类 */ public class ClothesFactory implements ByClothes{ public void clothes(String size){ System.out.println(已经给您定制好了一件大小为size的衣服); } public void 机器处理(){ } public void 原材料(){} }