技术开发 频道

软件设计:从对象创建和引用小议解耦

  总结

  本文中,我们以实现一个计算器应用为例,从对象的创建和引用的角度,列举了多种实现方式来诠释如何实现对象之间的解耦。应该说,上述的六种方式各有优缺点,没有哪种是最好的,实际使用时,可以根据实际场景的不同,而采取不同的解决方案。

  在简单的场景中,如果实现类本身就是一个内部类,或者从开发预期看,没有必要更换实现,抑或即使会有更换的需求,但是所涉及的范围可控,那么就可以直接使用 new 操作符创建对应的实现实例。

  同样,如果评估之后,确有可能在后期更换实现,并该实例在应用程序中多处会被使用到,便可以考虑使用工厂模式或者服务定位的方式,以降低后期因为更改实现而对程序产生影响的范围。

  如果应用本身即时基于 Spring 框架开发,或者是以 Bundle 的形式运行与 OSGI 环境中,又或者是运行于 WebBeans 容器之中,最后的几种方式便是当仁不让的选择。

  事实上,解耦是个相对的概念,并不存在完全程度的解耦。从上述各种解决方案可以看出,其目的都是转移了耦合点,从直接使用 new 操作符创建到将其移至工厂类中,进一步移至配置文件和系统属性,最终到 Java 类的标识。通过耦合点的转移,使得原先的对象之间耦合性得到了降低。而之所以可以去转移,原因是当发生实现更换时,新的耦合点更方便修改,并且影响范围更小。

  那么,究竟什么时候,我们可以大声宣称对象之间实现解耦了呢?通常而言,当发生实现更换时,达到如下之一的要求即可:

  不需要重现编译代码,而是通过修改配置文件或者系统属性即可达到目标。

  客户端的代码不需要修改并重新编译,例如只需要修改或者更新库文件即可。

0
相关文章