Java当中什么是耦合、如何解(降低)耦合
什么是耦合性
耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。
什么是程序间的耦合
假如:当我去new一个对象的时候,而这个对象不存在,这个时候程序会报编译时异常,也就意味着程序连运行都运行不了,我们可以理解为他们的耦合度较高。
如何解耦
我们可以利用Java的反射技术,通过类定名,来进行反射创建对象,这个时候我们可以成功的避免编译时异常,并且保证了项目在这个时候还能正常运行。
工厂模式解耦
在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。那么,这个读取配置文件,创建和获取三层对象的类就是工厂。
案例
早期我们的 JDBC 操作,注册驱动时,我们为什么不使用 DriverManager 的 register 方法,而是采用 Class.forName 的方式?
public class JdbcDemo1 {
public static void main(String[] args) throws Exception {
//1.注册驱动
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
//3.获取预处理 sql 语句对象
//4.获取结果集
//5.遍历结果集
}
}
原因就是:
我们的类依赖了数据库的具体驱动类(MySQL),如果这时候更换了数据库品牌(比如 Oracle),需要修改源码来重新数据库驱动。这显然不是我们想要的。
解决思路:
当是我们讲解 jdbc 时,是通过反射来注册驱动的,代码如下:
Class.forName("com.mysql.jdbc.Driver");//此处只是一个字符串
此时的好处是,我们的类中不再依赖具体的驱动类,此时就算删除 mysql 的驱动 jar 包,依然可以编译(运行就不要想了,没有驱动不可能运行成功的)。同时,也产生了一个新的问题,mysql 驱动的全限定类名字符串是在 java 类中写死的,一旦要改还是要修改源码。解决这个问题也很简单,使用配置文件配置。
总结
以上只是说的解耦的一种思维,方便大家理解。
解耦的核心思想:若要减少代码的耦合度,一定要尽量做到各个功能的代码不能交叉编写,编写封闭的代码。
相关文章
- JAVA中如何高效的实现SQL的like语法?
- 这是什么操作?java中的变量竟然可以先使用后声明?
- Java 第十一届 蓝桥杯 省模拟赛 户户通电(图算法)
- Java实现 洛谷 P2141 珠心算测验
- java实现汉诺塔计数
- java三大框架SSH(Struts2 Spring Hibernate)
- 请问什么是java序列化?以及如何实现java序列化?
- Java — java.lang.NullPointerException - 如何处理空指针异常
- 【java】EJB(Enterprise Java Bean)概述
- Java类的初始化顺序(静态变量、普通成员变量、静态代码块、构造方法的执行顺序);static静态代码块执行时机
- 如何使用IDEA创建一个简单的java工程?
- Java研发方向如何准备BAT技术面试答案(上)
- java / android int类型如何判空?
- Java如何格式化月份?
- Java如何从数组中查找对象元素?
- Java代理模式:如何优雅地控制对象访问?
- Java开发之——线程面试篇:死锁和如何避免死锁?