设计模式--代理模式

设计模式--代理模式

代理类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);
    }
}
posted on 2021-10-08 19:17  gyp666  阅读(30)  评论(0)    收藏  举报