【结构型模式之代理模式(动态)】

1. 动态代理模式的应用场景

  • 框架中使用的比较多
  • 在程序启动后,自动生成代理类

2. 动态代理模式实现方式?

  • JDK自带的动态代理
  • Javaassist字节码操作库实现
  • CGLIB
  • ASM(底层使用指令,可维护性差)

3. 使用jdk自带的实现动态代理

3.1 创建代理接口:IStar

public interface IStar {
    void sing();
    void signContract();
    void collectMoney();
}

3.2 创建待代理对象类:Star

public class Star implements IStar {
    private String name;

    public Star(String name) {
        this.name = name;
    }

    @Override
    public void sing() {
        System.out.println(this.name  + "明星唱歌");
    }

    @Override
    public void signContract() {
        System.out.println("委托给经济人签合同");
    }

    @Override
    public void collectMoney() {
        System.out.println("委托给经纪人收款");
    }
}

3.3 测试

public class Client {
    public static void main(String[] args) {
        Star star = new Star("袁思思");
        IStar proxyStar =(IStar) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{IStar.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                Object obj = null;

                if (method.getName().equals("sing")){
                    obj = method.invoke(star, args);
                }
                return obj;
            }
        });
        proxyStar.sing();
    }
}

结果输出

袁思思明星唱歌

4. 动态代理模式可以和其他设计模式结合呢?

这块可以多阅读spring的源码以及其他优秀框架进行学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值