Java 动态代理开发模式

前面讲了静态代理开发模式,因为我们了解了反射,完成可以通过反射机制实现动态代理

需求:老师与学生都有工作,而学生的工作是学习,老师的工作是教书。而需求是需要记录开始工作与结束工作,那么他们有共同点,用传统方式实现代理需要写两个代理类,而动态代理则不需要。只需要一个动态代理就能完成。
1.先定义一个接口

interface subject{
    
    
    public void working();
}

2.准备两个类来继承接口

class stu implements  subject{
    
    
    private String name;
    private int age;

    public stu() {
    
    
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    @Override
    public void working() {
    
    
        System.out.println("------学习----");
    }
}
class tea implements subject{
    
    
    private String name;
    private int age;

    public tea() {
    
    
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    @Override
    public void working() {
    
    
        System.out.println("-------授课中------");
    }
}

3.创建一个代理类

class createpoxy implements InvocationHandler {
    
    
    private Object target;//需要代理的对象
    //--------------创建代理方法
    public Object create(Object target){
    
    
        this.target=target;
        Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        return proxy;
    }

    //--------------执行实际代理操作
    @Override
    public Object invoke(Object proxy, Method method, Object[] objects) throws Throwable {
    
    
        System.out.println("------开始工作-------");
        method.invoke(target,objects);
        System.out.println("------结束工作-------");
        return null;
    }
}

4.调用示例

public static void main(String[] args) {
    
    
        createpoxy cp= new createpoxy();//创建代理
        subject s=new stu();//代理对象
        subject poxy=(subject) cp.create(s);//加载代理
        poxy.working();//执行代理
        System.out.println("------------------");
        createpoxy cp2=new createpoxy();
        subject t=new tea();
        subject pox=(subject) cp2.create(t);
        pox.working();

    }

结果

------开始工作-------
------学习----
------结束工作-------
-----------
------开始工作-------
-------授课中------
------结束工作-------

猜你喜欢

转载自blog.csdn.net/weixin_44690195/article/details/106633966