设计模式--代理模式
![]()
代理类proxyInterface 被代理类 realInterface
package com.geng;
public class InterfaceTest {
public static void main(String[] args){
Interface real=new RealInterface();
Interface anInterface=new ProxyInterface(real);
anInterface.test();
}
}
interface Interface{
public void test();
}
class RealInterface implements Interface{
@Override
public void test() {
System.out.println("真正的实现类");
}
}
class ProxyInterface implements Interface{
private Interface real;
public ProxyInterface(Interface real){
this.real=real;
}
private void check(){
System.out.println("代理之前的检查工作");
}
@Override
public void test() {
this.check();
real.test();
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args){
RealInterface realInterface=new RealInterface();
Interface test=(Interface) ProxyFactory.getProxyInstance(realInterface);
//只能执行接口中含有的方法。
//test.getAge();
test.test();
}
}
interface Interface{
public void test();
}
class RealInterface implements Interface{
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public void test() {
System.out.println("我是真正的类");
}
}
class ProxyFactory{
public static Object getProxyInstance(Object object){
MyInvocationHandler myInvocationHandler=new MyInvocationHandler();
myInvocationHandler.bind(object);
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),myInvocationHandler);
}
}
class MyInvocationHandler implements InvocationHandler{
private Object object;
public void bind(Object object){
this.object=object;
}
//此处的proxy其实就是生成的代理类
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(object,args);
}
}