当业务需要对某一个类中的某个方法进行扩展又不能改变原函数体的情况下,我们采用静态代理模式:
1、有一个ComInterface 公共接口
package cn.ecut.test.utils;
public interface ComInterface { void sayHi(); }
2、目标对象类 TargetObject 实现 ComInterface 接口
package cn.ecut.test.utils;
public class TargetObject implements ComInterface{
@Override
public void sayHi() {
System.out.println("-----很高兴见到你!-----");
}
}
3、代理对象类 ProxyObject 实现 ComInterface 接口
package cn.ecut.test.utils;
public class ProxyObject implements ComInterface {
//目标对象
private TargetObject targetObject;
public ProxyObject(TargetObject targetObject) {
this.targetObject = targetObject;
}
/**
* 通过目标对象TargetObject调用saiHi()方法
* 这样就避免了去修改函数体,保证了封装性的原则
*/
@Override
public void sayHi() {
System.out.println("-----开始拓展目标对象saiHi()方法-----");
//调用目标对象中的sayHi()方法
targetObject.sayHi();
System.out.println("-----结束拓展目标对象saiHi()方法-----");
}
}
4、测试类
package cn.ecut.test.utils;
public class ProxyTest {
public static void main(String[] args) {
ProxyObject proxy = new ProxyObject(new TargetObject());
proxy.sayHi();
}
}
5、测试结果

6、总结:静态代理类可以