概念
耦合性,也叫耦合度,是对模块间关联程序的度量。耦合的强弱取决于模块间结构和复杂性、调用模块的方式以及通过界面传递数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差(减低耦合性,可以提高其独立性)。
耦合
在软件工程中,耦合指的就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件的耦合最小、软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是 高内聚低耦合 。
耦合包括两个方面:(Java中)
1. 类之间的耦合
2. 方法之间的耦合
解耦
解耦是指降低程序间的依赖关系。
而我们在实际的开发中,应该做到: 编译期不依赖,运行时依赖。
所以,
解耦的思路是:
第一步 - 使用 反射 来创建对象,而避免使用new关键字
第二步 - 通过 读取配置文件 ,来获取要创建的对象的全限定类名
案例
编写JDBC的工程代码来分析程序的耦合
下面是一种JDBC操作的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class JdbcDemo1 {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm_spring","root","root");
PreparedStatement preparedStatement = connection.prepareStatement("select * from account");
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){ System.out.println(resultSet.getString("name")); }
resultSet.close(); preparedStatement.close(); connection.close();
} }
|
在注册驱动这一步骤当中,代码:
1 2
| DriverManager.registerDriver(new com.mysql.jdbc.Driver());
|
当程序的库依赖没有这个驱动类时,该程序将无法正常编译,所以应当使用:
1 2
| Class.forName("com.mysql.jdbc.Driver");
|
这样在同样没有这个驱动类时,程序只是出现异常。
这样做就降低了程序间的依赖关系,实现了解耦。
不过呢,最好还是用配置文件的方式,从中读取驱动的名字,然后再加载驱动,这样就更能降低依赖关系,使代码更容易维护!
所以,标准的JDBC操作的步骤应该为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import java.sql.*;
public class JDBC { public static void main(String[] args) { Connection conn = null; PreparedStatement psmt = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis","root","root"); psmt = connection.prepareStatement("select * from account"); ResultSet rs = preparedStatement.executeQuery(); while(rs.next()) { System.out.println(rs.getString("name")); }
rs.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { if(conn != null) conn.close(); if(psmt != null) psmt.close(); } catch(Exception ex) { e.printStackTrace(); } } } }
|