JAVA安全基础之代理模式(一)

代理模式是java的一种很常用的设计模式,理解代理模式,在我们进行java代码审计时候是非常有帮助的。

静态代理

代理,或者称为 Proxy ,简单理解就是事情我不用去做,由其他人来替我完成。在黄勇《架构探险》一书中,我觉得很有意思的一句相关介绍是这么说的:

赚钱方面,我就是我老婆的代理;带小孩方面,我老婆就是我的代理;家务事方面,没有代理。

代理类与被代理类都有个共同的特征,就是都实现了相同的接口。代理类调用被代理类的方法。

现在我们用一个demon来举例代理模式,假如一个班的同学要向老师交班费,但是都是通过班长把班费转交给老师。这里,班长就是代理学生上交班费。

1.(接口)创建Person接口:

public interface Person {
//上交班费
void giveMoney();
}

2.(被代理类)Student类实现了Person接口。Student可以具体实施上交班费的动作。

public class Student implements Person{
private String name; public Student(String name) {
this.name = name;
} public String getName() {
return name;
} @Override
public void giveMoney() {
System.out.println(name + "上交了班费");
}
}

3.(代理类)创建班长类StudentProxy,这个类也实现了Person接口,还另外持有一个Student类对象。他可以帮Student类执行giveMoney()方法

public class StudentProxy implements Person{
//被代理的学生
Student student; //传入被代理的对象
public StudentProxy(Student student) {
this.student = student;
} //代理上交班费,调用被代理学生的上交班费行为
@Override
public void giveMoney() {
student.giveMoney();
}
}

使用代理模式:

public class ProxyTest {
public static void main(String[] args) {
//创建被代理类,xiaoming同学
Student xiaoming = new Student("xiaoming");
//创建代理类,把xiaoming同学传给代理类StudentProxy班长
StudentProxy banzhang = new StudentProxy(xiaoming);
//用代理类执行被代理类的方法
banzhang.giveMoney();
}
}

执行结果:

到这里假设一个场景,班长作为中间人,帮忙交班费时候,又给老师转达了一些话,比如成绩有所提升...... 这是只需要修改代理类StudentProxy就可以做到。

新建一个talk方法,放入giveMoney中调用

public class StudentProxy implements Person{
//被代理的学生
Student student; //传入被代理的对象
public StudentProxy(Student student) {
this.student = student;
} //学习有进步
private void talk(Student student){
System.out.println(student.getName() + "最近学习有进步");
} //代理上交班费,调用被代理学生的上交班费行为
@Override
public void giveMoney() {
talk(student);
student.giveMoney();
}
}

执行结果:

到这里理解了静态代理模式后,为我们下一章节介绍动态代理打下基础。

欢迎关注我的公众号,同步更新喔

JAVA安全基础之代理模式(一)的更多相关文章

  1. JAVA安全基础之代理模式(二)

    JAVA安全基础之代理模式(二) 上篇讲到静态代理模式,这时候我们发现,一个代理类只能为一个类服务,如果需要代理的类很多,那么就需要编写大量的代理类,比较繁琐.所以就有了动态代理 动态代理 动态代理的 ...

  2. Java的三种代理模式

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  3. Java的三种代理模式(Spring动态代理对象)

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  4. Java设计模式学习记录-代理模式

    代理模式 代理模式是常见设计模式的一种,代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起 ...

  5. java设计模式之Proxy(代理模式)

    java设计模式之Proxy(代理模式) 2008-03-25 20:30 227人阅读 评论(0) 收藏 举报 设计模式javaauthorizationpermissionsstringclass ...

  6. Java设计模式之《代理模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6525527.html 代理模式算是我接触较早的模式,代理就是中介,中间人.法律上也有代理, ...

  7. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  8. 理解java的三种代理模式

    代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class ...

  9. Java的三种代理模式&完整源码分析

    Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCache缓存的实现机制](https://www.c ...

随机推荐

  1. ms17-010

    永恒之蓝和ms17-010简介: 永恒之蓝(EternalBLUE)"是Shadow Brokers(影子经纪人)黑客组织公布的一款黑客工具,该工具利用的漏洞也被称为MS17-010漏洞,M ...

  2. RHCSA_DAY05

    计算机硬件组成部分 输入设备:键盘.鼠标.触控屏等 主机设备:主板.中央处理器(CPU).主存储器(内存).网卡.声卡.显示卡等 输出设备:屏幕.耳机.打印机.投影仪等 外部存储设备:硬盘.软盘.光盘 ...

  3. 开源分享:谷歌大佬联合打造《高级Kotlin强化实战(附Demo)》

    Kotlin 以其简洁的特性而闻名,而在我们的实践中,更加简洁就意味着更加高效.事实上,在使用 Kotlin 的专业 Android 开发者中,有多达 67% 的人表示 Kotlin 已经帮助他们提升 ...

  4. Spring对Controller、Service、Dao进行Junit单元测试总结

    测试类注解 @RunWith(SpringRunner.class) @SpringBootTest(classes={DemoApplication.class}) 以Controller层的的单元 ...

  5. 1~n数字中1出现的个数

    1~n数字中1出现的个数 LeetCode 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 感觉挺有意思 对于一个数,我们先局部分析一下,比如123456,我们考虑百位这个 ...

  6. Use w3m as Web Browser

    Installation: apt-get install w3m. use "a" to input text, "tab" to jump between ...

  7. MyBatis学习02(配置解析)

    配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configur ...

  8. 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564

    01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...

  9. windows中抓取hash小结(上)

    我上篇随笔说到了内网中横向移动的几种姿势,横向移动的前提是获取了具有某些权限的用户的明文密码或hash,正愁不知道写点啥,那就来整理一下这个"前提"-----如何在windows系 ...

  10. 单片机学习(八)点阵LED的使用

    目录 一.点阵LED的理论知识 1. 点阵屏的打开方式 2. LED点阵简介 3. 点阵LED的结构和操作方式 4. 74HC595模块 PPT上的简介 串行转并行的工作原理 二.编码实现 1. C5 ...