動態(tài)代理
第一步:實現(xiàn)鋼筆接口
interface PenInterface {
void write();
void draw();
}
第二步:學(xué)生的手實現(xiàn)鋼筆接口
public class StudentHand implements PenInterface {
@Override
public void write() {
System.out.println("學(xué)生用筆寫字");
}
@Override
public void draw() {
System.out.println("學(xué)生用筆畫畫");
}
}
第三步:學(xué)生代理的功能
public class StudentProxy implements InvocationHandler {
private Object mTarget;
public StudentProxy(Object target) {
mTarget = target;
}
public Object getInstance() {
return Proxy.newProxyInstance(mTarget.getClass().getClassLoader(), mTarget.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
doSthBefore();
Object object = method.invoke(mTarget, args);
doSthAfter();
return object;
}
private void doSthBefore() {
System.out.println("調(diào)用方法之前");
}
private void doSthAfter() {
System.out.println("調(diào)用方法之后");
}
}
最后:通過學(xué)生去動態(tài)實現(xiàn)相關(guān)功能
public static void main(String[] args) {
PenInterface penInterface = new StudentHand();
PenInterface student = (PenInterface) new StudentProxy(penInterface).getInstance();
student.draw();
//student.write();
}