代理模式(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()
方法返回值(如果它有返回值的话)。