Java设计模式,结构型(四)(代理模式)

12 篇文章 0 订阅
12 篇文章 0 订阅

代理模式(Proxy)

代理模式是使用代理对象对目标对象进行操作的模式。类比于去银行办卡,办卡时候将办卡的业务交给工作人员,工作人员会帮你办卡,还会给你开通手机银行之类的,代理模式可以通过对原有功能进行代理,并且可以对功能进行扩展。

静态代理

接口功能;

public interface IBank {
    void aply();
}

代理目标

public class Bank implements IBank {
    @Override
    public void aply() {
        System.out.println("办卡");
    }
}

代理者:

public class BankProxy implements IBank {
    private IBank bank;
    public BankProxy(IBank bank) {
        this.bank = bank;
    }
    @Override
    public void aply() {
        bank.aply();
        System.out.println("开通手机银行");
    }
}

使用:

public class MyClass {
    public static void main(String[] args){
        Bank bank=new Bank();
        BankProxy bankProxy=new BankProxy(bank);
        bankProxy.aply();

    }
}

动态代理

静态代理代理类需要实现接口,如果类多了维护麻烦,可以使用动态代理,动态代理是JDk实现的API,通过反射动态的创建代理对象。

public class MyClass {
    public static void main(final String[] args) {
        final Bank bank = new Bank();
        IBank bankProxy = (IBank)Proxy.newProxyInstance(
                bank.getClass().getClassLoader(),
                bank.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object o, 
                                         Method method, 
                                         Object[] objects) throws Throwable {
                        return method.invoke(bank, objects);
                    }
                });
        String a=bankProxy.aply();
        System.out.println(a);

    }
}

invoke()返回值为aply()方法返回值(如果它有返回值的话)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值