代理模式

来源:互联网 发布:阿里云的网站空间 编辑:程序博客网 时间:2024/06/11 10:50

动态代理举例

/*** * 用户控制接口 * @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

0 0