在编写代码的时候使用这种设计模式可以实现在不对源类修改的情况下,并可以隐式的调用对象。
这里简单介绍两种代理模式:静态代理和动态代理。
一 静态代理
举个例子,比如有一个Class People,该类有一个方法是唱歌sing(),代码如下:
接口People:
实现类PeopleImpl:
但是此时有一个需求,需要在唱歌之前鞠躬,唱歌之后退场。在不修改PeopleSimple源代码逻辑的情况下,可以使用静态代理新增一个代理实现类来增加新的功能,例如:
此时执行main方法的运行结果是:
实现了新增的功能。
二 静态代理是在编译之前就写好的代理类代理代码,这种方式的缺点就是要是如果许多方法之前之后都需要使用相同的操作时,需要写重复的代码并且需要修改多个静态代理类,为了解决这种问题,JDK在底层的
1.实现InvacationHandler的MyInvocationHandler类:
2.新建一个动态代理类:
3.People接口新增dance方法,PeopleImpl对其进行了实现:
4.测试类及结果: