美文网首页
2019-07-30-代理模式

2019-07-30-代理模式

作者: 王元 | 来源:发表于2019-08-16 23:20 被阅读0次

    代理模式,侧重于对某一事物的具体方面的实现,代理可能是对象本身,但代理和对象不完全相同

    这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法

    一,静态代理

    • 可以做到在不修改目标对象的功能前提下,对目标功能扩展
    • 因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多
    • 同时,一旦接口增加方法,目标对象与代理对象都要维护
            public class UserProxy implements IUserDao {
            
                private IUserDao mUser;
            
                public UserProxy(IUserDao user){
                    mUser = user;
                }
            
                @Override
                public void add(User user) {
                    mUser.add(user);
                }
            
                @Override
                public void delete(int id) {
                    mUser.delete(id);
                }
            
                @Override
                public void update(int id) {
                    mUser.update(id);
                }
            
                @Override
                public void quey(int id) {
                    mUser.quey(id);
                }
            }
    

    二,动态代理

    • 代理对象,不需要实现接口
    • 代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型)
    • 动态代理也叫做:JDK代理,接口代理
    • JDK中生成代理对象的API
    • 代理类所在包:java.lang.reflect.Proxy
    • 目标对象实现的接口的类型,使用泛型方式确认类型
    • 使用了反射机制,对性能会造成影响

    代码简单示例:

    public class DynamicPorxy {
        private Object target;
        public DynamicPorxy(Object target) {
            this.target = target;
        }
        //给目标对象生成代理对象给目标对象生成代理对象
        public Object getProxyInstance() {
            return Proxy.newProxyInstance(target.getClass().getClassLoader(),
            target.getClass().getInterfaces(), new InvocationHandler() {
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    Object value = method.invoke(target, args);
                    return value;
                }
            });
        }   
    }

    相关文章

      网友评论

          本文标题:2019-07-30-代理模式

          本文链接:https://www.haomeiwen.com/subject/xyuwrctx.html