当前位置: 首页 > wzjs >正文

网站制作与网站建设实际报告搜索排名优化软件

网站制作与网站建设实际报告,搜索排名优化软件,网站开发制作阶段的说课稿,中国十大广告公司排名结构型模式 - 代理模式 (Proxy Pattern) 代理模式是一种结构型设计模式,它允许通过代理对象来控制对另一个对象(目标对象)的访问。代理对象充当目标对象的接口,客户端通过代理对象间接访问目标对象。 分为两大类 静态代理&#…

结构型模式 - 代理模式 (Proxy Pattern)

代理模式是一种结构型设计模式,它允许通过代理对象来控制对另一个对象(目标对象)的访问。代理对象充当目标对象的接口,客户端通过代理对象间接访问目标对象。


分为两大类

  • 静态代理(编译时就知道
  • 动态代理(Java程序运行时才知道

Java 静态代理

// 定义用户服务接口
public interface UserService {// 添加用户方法void addUser(String username);
}// 实现用户服务接口的具体类
public class UserServiceImpl implements UserService {@Overridepublic void addUser(String username) {System.out.println("添加用户: " + username);}
}// 用户服务的代理类
public class UserServiceProxy implements UserService {// 持有目标对象private UserService target;public UserServiceProxy(UserService target) {this.target = target;}@Overridepublic void addUser(String username) {// 在调用目标方法之前添加额外逻辑,这里是打印日志System.out.println("开始添加用户操作,记录日志...");// 调用目标对象的方法target.addUser(username);// 在调用目标方法之后添加额外逻辑,这里是打印日志System.out.println("添加用户操作完成,记录日志...");}
}// 测试静态代理的类
public class StaticProxyTest {public static void main(String[] args) {// 创建目标对象UserService target = new UserServiceImpl();// 创建代理对象,并将目标对象传入UserService proxy = new UserServiceProxy(target);// 通过代理对象调用添加用户方法proxy.addUser("张三");System.out.println();}
}

Java 动态代理又细分为两类

  • jdk 代理
  • cglib 代理
// jdk 方式import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;// 业务接口
public interface UserService {void addUser(String username);
}// 业务接口实现类
public class UserServiceImpl implements UserService {@Overridepublic void addUser(String username) {System.out.println("添加用户: " + username);}
}// 代理处理器
class UserServiceProxyHandler implements InvocationHandler {private final Object target;public UserServiceProxyHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 在调用目标方法之前添加额外逻辑System.out.println("开始执行添加用户操作...");// 调用目标方法Object result = method.invoke(target, args);// 在调用目标方法之后添加额外逻辑System.out.println("添加用户操作执行完毕。");return result;}
}// 测试类
public class JdkProxyExample {public static void main(String[] args) {// 创建目标对象UserService target = new UserServiceImpl();// 创建代理处理器UserServiceProxyHandler handler = new UserServiceProxyHandler(target);// 生成代理对象UserService proxy = (UserService) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),handler);// 调用代理对象的方法proxy.addUser("张三");}
}
// cglib 代理import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;// 业务类
public class UserManager {public void addUser(String username) {System.out.println("添加用户: " + username);}
}// 代理拦截器
public class UserManagerInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {// 在调用目标方法之前添加额外逻辑System.out.println("开始执行添加用户操作...");// 调用目标方法Object result = proxy.invokeSuper(obj, args);// 在调用目标方法之后添加额外逻辑System.out.println("添加用户操作执行完毕。");return result;}
}// 测试类
public class CglibProxyExample {public static void main(String[] args) {// 创建 Enhancer 对象Enhancer enhancer = new Enhancer();// 设置父类enhancer.setSuperclass(UserManager.class);// 设置回调函数enhancer.setCallback(new UserManagerInterceptor());// 生成代理对象UserManager proxy = (UserManager) enhancer.create();// 调用代理对象的方法proxy.addUser("李四");}
}

对比分析

根本差异体现

代理机制

  • JDK 代理:依赖接口。在 JDK 代理示例中,UserService 是一个接口,UserServiceImpl 实现了该接口,代理对象是基于接口生成的。
  • CGLIB 代理:基于继承。在 CGLIB 代理示例中,UserManage 是一个普通类,代理对象是 UserManage 的子类。

方法调用

  • JDK 代理:在 InvocationHandler 的 invoke 方法中,使用 method.invoke(target, args) 调用目标对象的方法,这里的 target 是实际的目标对象。
  • CGLIB 代理:在 MethodInterceptor 的 intercept 方法中,使用 proxy.invokeSuper(obj, args) 调用目标类的方法,obj 是代理对象本身。

文章转载自:

http://mM1sP2yP.dschz.cn
http://kNQRqhh6.dschz.cn
http://vymneiDe.dschz.cn
http://ZrHJb9XF.dschz.cn
http://yitVttqB.dschz.cn
http://NdVY4imw.dschz.cn
http://fDMw8qOq.dschz.cn
http://Scx7rutQ.dschz.cn
http://sHgxUzSg.dschz.cn
http://RyQWPFVu.dschz.cn
http://217qycyc.dschz.cn
http://8y561z1n.dschz.cn
http://te6r7RQy.dschz.cn
http://P0C7F8BC.dschz.cn
http://heT288Cq.dschz.cn
http://ZEIIOvIu.dschz.cn
http://TVa2AeZQ.dschz.cn
http://Ebm4SVnw.dschz.cn
http://QXuQdXc5.dschz.cn
http://cli5m5Q7.dschz.cn
http://CFsoMJmq.dschz.cn
http://z3mo0XrV.dschz.cn
http://140QaEST.dschz.cn
http://NUmLrVio.dschz.cn
http://15jH4Jvv.dschz.cn
http://0klgYomg.dschz.cn
http://B9EtPzDE.dschz.cn
http://qOjBMTiM.dschz.cn
http://me7bs6CB.dschz.cn
http://7SYTTq8s.dschz.cn
http://www.dtcms.com/wzjs/755350.html

相关文章:

  • 合肥市城乡建设局2019网站企业展馆展厅设计
  • 有那些专门做职业统计的网站空间平面的网页设计素材
  • 做数据可视化图的网站下载 wordpress插件
  • 网站开发需求确认书广东企业网站建设公司
  • 做企业网站一般多少钱wordpress怎么适配手机端
  • 25转行做网站运营wordpress新用户
  • 小鱼儿网站做啥用的新公司做网站
  • 营销型网站头部布局的元素网站源码开发
  • 设计学校网站模板网站建设一般多少钱要如何选择
  • 中石化第四建设有限公司网站网络运维与安全
  • 网页设计网站含义网站制作一般哪家好
  • 网站模板小偷东莞防疫最新公告
  • 自贡百度做网站多少钱玉泉路网站制作
  • 制造网站建设wordpress微信网站
  • 假山网站如何做wordpress影视打赏源码
  • 网站建设应注意的问题珠海网站备案
  • 大连龙彩科技的网站在谁家做wordpress后台左侧菜单
  • 网站经典设计网站在线演示
  • 网站建设的具体步骤免费软件库
  • mk厂手表网站免费域名申请国外
  • 微建站平台提升学历最快是哪种方式
  • 学院宣传网站建设简介专业的医疗行业网站模板
  • 物流企业网站建设与管理规划书深圳市宝安区松岗
  • 网站开发创业计划书模板网站备案要关闭吗
  • 不花钱自己可以做网站吗最新军事新闻
  • 什么网站可以找人做设计师做门户网站私活多少钱
  • 东莞网站建设都找菲凡网络注册城乡规划师一年能挂多少钱
  • 无锡门户网站制作服务vs做网站不显示图片
  • 优惠券怎么做自己的网站做301到别人网站
  • 做的网站需要什么技术支持百度怎么优化排名