设计模式之动态代理和静态代理

静态代理
在这里插入图片描述

public interface ITeacher {
        void teach();
}

public class TeacherDao implements ITeacher {
    @Override
    public void teach() {
        System.out.println("老师授课开始...");
    }
}
public class ProxyTeacherDao implements ITeacher {
    ITeacher teacher;

    public ProxyTeacherDao(ITeacher teacher) {
        this.teacher = teacher;
    }
    @Override
    public void teach() {
        System.out.println("老师准备资料中...");
        teacher.teach();
        System.out.println("老师清理课堂...");
    }
}

public class Client {
    public static void main(String[] args) {
        TeacherDao teacher=new TeacherDao();
        ProxyTeacherDao proxy=new ProxyTeacherDao(teacher);
        proxy.teach();
    }
}

运行结果:
老师准备资料中…
老师授课开始…
老师清理课堂…
动态代理
在这里插入图片描述

public interface Iteacher {
    void teach();
}
public class TeacherDao implements Iteacher {
    @Override
    public void teach() {
        System.out.println("老师动态授课中...");
    }
}
public class TeacherProxy {
    Object target=null;

    public TeacherProxy(Object proxy) {
        this.target = proxy;
    }
    public Object ProxyFactory(){

        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("老师动态准备资料中...");
                Object invoke = method.invoke(target,args);
                System.out.println("老师动态整理课堂中...");
                return invoke;
            }
        });
    }
}
public class Client {
    public static void main(String[] args) {
        TeacherDao teacher=new TeacherDao();
        Iteacher proxy = (Iteacher) new TeacherProxy(teacher).ProxyFactory();
        proxy.teach();
    }
}

运行结果:
老师动态准备资料中…
老师动态授课中…
老师动态整理课堂中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅唱战无双

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值