ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java动态代理实现与原理详细分析

2020-11-14 20:35:20  阅读:182  来源: 互联网

标签:java 对象 代理 目标 add student 详细分析 public


代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。

示例:火车票代售就是代理模式的体现,我们可以从火车票代售点买火车票,代售点代理了火车站对象,提供了买火车票的方法

 

 

 一:静态代理

  • 前提:需要代理对象和目标对象实现一样的接口
  • 优点:可以在不修改目标对象的前提下,扩展目标对象的功能
  • 缺点:如果目标对象的方法发生改变,比如方法名做了修改,则代理类也要做修改
/**
 * 接口
 * @author Ethon
 *
 */
public interface Person {

    void add();

}
/**
 * 目标对象
 * @author Ethon
 *
 */
public class Student implements Person {
    
    @Override
    public void add() {
            System.out.println("这是目标对象中的add()方法");
    }
}
/**
 * 代理对象
 * @author Ethon
 *
 */
public class StudentProxy implements Person{
    
    //目标对象
    private Student student;
    
    public StudentProxy(Student student){
        this.student = student;
    }

    @Override
    public void add() {
        System.out.println("开启事务..."); // 扩展功能
        student.add();
        System.out.println("提交事务...");
    }
}
/**
 * 测试类
 * @author Ethon
 *
 */
public class Test {
    
    public static void main(String[] args){
        //目标对象
        Student student = new Student();
        //代理对象
        StudentProxy proxy = new StudentProxy(student);
        proxy.add();
    }
}

输出结果:

开启事务...
这是目标对象中的add()方法
提交事务...

 

标签:java,对象,代理,目标,add,student,详细分析,public
来源: https://www.cnblogs.com/wakey/p/13974565.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有