代理模式

動態代理舉例

/***
 * 用戶控制接口
 * @author Administrator
 *
 */
public interface UserManager {

    public void addUser(String userId,String userName);
    public void modifyUser(String userId,String userName);
    public void delUser(String userId);
    public String findUser(String userId);
}
/****
 * 用戶管理真正的實現類
 * @author Administrator
 *
 */
public class UserManagerImpl implements UserManager {

    /*****
     * 添加用戶
     */
    public void addUser(String userId, String userName) {
        System.out.println("正在添加用戶,用戶爲:"+userId+userName+"……");
    }
    /*****
     * 刪除用戶
     */
    public void delUser(String userId) {
        System.out.println("delUser,userId="+userId);
    }
    /***
     * 查找用戶
     */
    public String findUser(String userId) {
        Log.d("user--","findUser,userId="+userId);
        System.out.println("findUser,userId="+userId);
        return userId;
    }

    public void modifyUser(String userId, String userName) {
        System.out.println("modifyUser,userId="+userId);
    }
}
//產生一個對象的代理
public class LogHandler implements InvocationHandler {
    //被代理的類
    private Object targetObject;
    public Object newProxyInstance(Object targetObject) {
        this.targetObject = targetObject;
        return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
                targetObject.getClass().getInterfaces(), this);
    }
//完成對真正方法的調用
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object ret = null;

        try {
            Log.d("user--","正在進行操作前的準備工作……");
            //調用目標方法
            ret = method.invoke(targetObject, args);
            Log.d("user--","操作成功,正在進行確認處理……");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("error-->>" + method.getName());
            throw e;
        }
        return ret;
    }
}
public class UserManagerActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //目標對象
        LogHandler logHandler = new LogHandler();
        //生成代理
        UserManager userManager = (UserManager)logHandler.newProxyInstance(new UserManagerImpl());
        userManager.findUser("0001");
    }
}

參考1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章