設(shè)計模式:動態(tài)代理

動態(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();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容