我们经常会遇到当前功能不满足现状的时候,如果是原来业务代码的话并且量少,我们就会直接改动源码逻辑来解决这个问题;如果是业务代码且量大,这种一般为共性问题,一般会统一处理解决,例如在数据吐出的时候,遍历增强数据内容,已满足需求,或者是原来代码的抽象,使用代理模式,装饰模式等等,让代码更好看,逻辑看起来更明确。

  第三方库

  上面说的情况,代码都是自己的情况,因为是自己的代码,所以控制这些都是相对比较open的,原来设计的一些情况,不满足就改,但是当引用的是第三方库的代码的时候,我们就会遇到很多的麻烦。

  正常流程,我们会做功能增强,一般表现为代理模式。典型的就是数据库连接池。也有沿用原来的方式的,例如扩展io。原来就是装饰者模式,现在扩展,继续使用装饰者模式,还有filter,本身就是责任链模式,我们新加的话,直接把代码写好后加入配置即可。

  上面说的这几种情况都是相对比较友好的情况。就是第三方库本身就比较喜欢开放,而且本身还有一些支持。

  不想被扩展的编码

  final

  使用final关键字修饰。如果你想用一个增强的类动态替换掉原来的对象,结果对方的成员变量的描述是final的,一旦赋值不能替换。这个只能在赋值的时候必须完成增强,带来很多麻烦。

  包访问权限

  有些情况,我们本身比较适合继承增强,但是父类都是包访问权限,我们自己的代码一般不会和第三方的同包名。所以这种情况也是访问不到的

  collections集合

  emptyList(),emptyMap() ,emptySet()。通过collections创建的这几种集合都是空的,且不可变,不支持什么增删改操作。想加入一些额外的数据的时候,发现根本加布进去,必须选择替换集合的方式。

  arrays

  asList也是一个不可修改的集合。问题和解决方案同上。

  后门

  上面的问题这么多,如果遇到优先选择一些正常的手段,在正常逻辑上找出合适的方法来增强。

  如果没有就只能选择一些java的特定方法了。

  反射

  反射可以做值的修改,没有什么限制,就是后期维护代码会比较麻烦,而且使用了字符串操作,在类找调用的时候是找不到的。

  字节码修改

  字节码是可以redefine或者transform的。所以在类加载的时候替换掉字节码文件中让你头疼的部分的就可以。如果不知道怎么做,查一下jvmti以及asm,javassist即可。

  总结

  

转载于:https://juejin.im/post/5c9ddfd36fb9a05e505c40d9

分享:从功能增强说起相关推荐

  1. IE0新特性归纳及JavaScript 功能增强分析

    2011年4月13日,微软IE部门企业副总裁迪恩哈查莫维奇在拉斯维加斯召开的Mix开发者大会上展示了首个IE10平台预览版--IE10(Internet Explorer 10.0).从预览第三版起, ...

  2. datagrid底部显示水平滚动_DevExpress WPF v19.1:Data Grid/Tree List等控件功能增强

    行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...

  3. PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)

    标签 PostgreSQL , 10.0 , 后台运行 , pg_background_launch , pg_background_result , pg_background_detach , p ...

  4. Elixir 1.2带来多项功能增强和性能提升

    José Valim宣布了Elixir这门动态.函数式编程语言的1.2版本. \\ Valim是Elixir的创建者.他表示,1.2版本"带来了功能增强.Bug修复.性能提升等等" ...

  5. VB.NET完成一个功能增强的记事本

    VB.NET完成一个功能增强的记事本 分类: DotNet 2011-07-02 16:05 153人阅读 评论(0)收藏 举报 想必大家都听说过Notepad2,Notepad++一类的记事本增强软 ...

  6. FI功能增强业务说明书

    FI功能增强业务说明书 目  录 目  录 1 1 流程编码 2 2 流程简要描述 2 3 操作说明 2 3.1 成本中心屏幕增强 2 3.2 内部订单主数据屏幕增强 3 3.3 固定资产主数据屏幕增 ...

  7. 销售订单屏幕增强及功能增强

    增强点在程序SAPMV45A中有明显标志,见下图 或查看该程序子例程以USEREXIT_开头的即为增强出口,这些出口就包含在上图的INCLUDE程序中. 1.1  .销售订单行项目屏幕增强 程序SAP ...

  8. SD功能增强业务说明书

    1.     流程编码... 4 2.     流程简要描述... 4 3.     操作说明... 4 4.1.     销售合同... 4 1.   同步定价日期... 4 2.   单据附加数据 ...

  9. C++对C的加强之三目运算符功能增强

    三目运算符功能增强 三目运算符在C和C++编译器的表现 结论 C语言返回变量的值 C++语言是返回变量本身 注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 C语言如何支持类似C+ ...

  10. html5拖动的面板 panel,基于jQuery UI的Bootstrap Panel面板功能增强插件

    LobiPanel是一款基于jQuery UI的Bootstrap Panel面板功能增强插件.通过该插件可以为Bootstrap的原生Panel面板增加编辑标题,最大化,最小化,面板拖动关闭面板等功 ...

最新文章

  1. YOLO算法史上最全综述:从YOLOv1到YOLOv5
  2. python三大神器之生成器
  3. iOS 快速定位约束冲突
  4. vue-cli Invalid Host header
  5. AspectJ切入点语法详解
  6. mysql5.6 load_MySQL 5.6 dump/load buffer pool实验
  7. 如何为自定义域使用我自己的SSL证书?
  8. python选择应用窗口到最前面
  9. halcon显示坐标_机器视觉之halcon入门(10)-一文弄懂halcon例程:color_fuse.hdev
  10. 第 7 章 Neutron - 069 - 理解 Neutron Server 分层模型
  11. 台式计算机安装无线网卡驱动程序,台式机无线网卡驱动,小编教你台式机无线网卡驱动如何安装...
  12. nginx启用reuseport
  13. 抓包工具之httpwatch的使用
  14. 核心单词Word List 7
  15. 仿蘑菇街界面应用(1)
  16. 关于emacs字体放大问题
  17. Cookie的设置域名domain与跨域的问题
  18. 计算机专业全真模拟试卷答案,最新高职考试全真模拟试卷计算机类试题(二、六、七、八、九、十,山东省,有答案)...
  19. LeetCode 迷宫系列(0490, 0499, 0505)
  20. Components of Ryu

热门文章

  1. SQL Server2008R无法登录的解决方案(系统文件损坏)1814 18456....不看别后悔,有用请点赞...
  2. uploadify 上传时丢失session
  3. JQuery合并table单元格--有限制(table格式需要注意)
  4. PetShop 4.0知识点:base 关键字用于从派生类中访问基类的成员
  5. Spring Boot 使用 Log4j2
  6. Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结
  7. HTML5程序开发范例宝典(韩旭著)读书笔记之渐变背景
  8. 微信语音遥控Windows Azure云虚拟机
  9. 彻底封杀讯雷下载,做好网络管理
  10. 使用java9的uuid生成方式,让uuid生成速度提升一个档次