java - 动态代理

动态代理在很多场景下都有使用:比如 rpc 之类的。
但是看很多地方,并没有讲清楚,为什么要使用动态代理,相对于静态代理的优势在哪里?-》代码简洁

首先,来看看什么是静态代理

静态代理

public interface FontProvider {
       Font getFont(String name);
}
public abstract class ProviderFactory { 
    public static FontProvider getFontProvider() { 
          return new FontProviderFromDisk(); 
      }
}
public class Main() { 
      public static void main(String[] args) {
             FontProvider fontProvider = ProviderFactory.getFontProvider();
             Font font = fontProvider.getFont("微软雅黑"); ......
         }
}

缓存

public class CachedFontProvider implements FontProvider {
       private FontProvider fontProvider; 
       private Map<String, Font> cached;
       public CachedFontProvider(FontProvider fontProvider) { 
              this.fontProvider = fontProvider;
         } 
        public Font getFont(String name) { 
              Font font = cached.get(name);
               if (font == null) { 
                    font = fontProvider.getFont(name); 
                    cached.put(name, font); 
              } 
                return font;
           }
          }
/* 对工厂类进行相应修改,代码使用处不必进行任何修改。 这也是面向接口编程以及工厂模式的一个好处 */
public abstract class ProviderFactory {
           public static FontProvider getFontProvider() {
               return new CachedFontProvider(new FontProviderFromDisk()); 
          }
      }

上面不直接修改FontProviderFromDisk是因为还有可能出现其他情况的provider

动态代理

上述代码有没有发现一个问题?
如果FontProvider类似的类越来越多,ProviderFactory就必须实现多个get方法
那么业务增长带来的就是代码臃肿
所以,动态代理是用来解决这个问题的。
具体可以参考网上实现:Proxy,InvocationHandler
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如何使用动态代理? 参照上面的例子,我们可以知道要实现动态代理需要做两方面的工作。 首先需要新建一个类,并且这个类...
    java部落阅读 6,380评论 1 16
  • 相关概念1.1 代理  在某些情况下,我们不希望或是不能直接访问对象 A,而是通过访问一个中介对象 B,由 B 去...
    天空在微笑阅读 3,150评论 0 0
  • 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足...
    java部落阅读 4,164评论 3 13
  • 首先先理解一下为什么要使用代理。在日常生活中,代理可以解决业务相关双方直接交流的不便的问题,同时还可以提供比直接交...
    Qi0907阅读 2,934评论 0 0
  • 如今的智能手机或是平板电脑俨然成为日常生活的一部分,有些人甚至将智能手机比喻为自己“不可或缺的器官”。不过这些设备...
    公子义阅读 3,382评论 0 0

友情链接更多精彩内容