如何解耦之工厂模式解耦

解耦及其必要性

解耦,顾名思义,即解除耦合,消除依赖关系。但是在程序开发中,如果两个模块协同工作,则必然存在耦合。如果两个模块间没有任何依赖关系,则表示他们是独立的,不会有任何交叉或者协同工作的可能性。所以,我们这里说的解耦并非消除代码间的耦合,而是降低它们的依赖关系,让依赖关系处在一个合理的范围。

低耦合的程序设计是我们开发中的一个最基本要求,它会使我们开发的功能独立性提高,大大增加了模块的复用性。同时,在后期对项目维护时,降低了维护成本、项目做后续升级时,减少了重构的风险。它是一个合格的程序员所必须具备的设计理念。

解耦的思路分析

当时 我们讲解 jdbc 时,是通过反射来注册驱动的,已经不会采用DriverManager.registerDriver()方法来注册驱动了,因为当时我们介绍一种更好的方式Class.forName(),通过反射的方式也能实现注册驱动的功能。那这两种方式,在本质上有什么区别呢?

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Class.forName("com.mysql.jdbc.Driver");//此处只是一个字符串
  • 第一种方式会导致驱动注册两次,但是这个问题并不会影响我们太多。最多就是执行效率会略有下降。而更重要的问题是,当我们需要更换数据库品牌时,例如由MySQL数据库改为Oracle数据库时,DriverManager.registerDriver()会因为依赖具体驱动实现,而导致我们修改源码。而Class.forName()方式则不会。

  • 换句话说,在我们使用一些不是频繁创建的对象时,采用反射的方式创建对象显然更加合理。而反射创建时需要提供创建类的全限定类名,这个名称如果写在java代码中,造成的结果就是修改仍然避免不了修改源码。所以,我们需要使用配置文件,把要创建类的全限定类名用配置文件配置起来。

  • 解耦的思路总结:

    • 第一:使用反射创建对象
    • 第二:创建对象用到的全限定类名用配置文件配置起来

猜你喜欢

转载自blog.csdn.net/weixin_47785112/article/details/107384162