程序耦合和解耦的讲解
2020.9.21
By ljm
1.什么是耦合
在我们编写程序的时候,通常会用多个功能模块,共同实现我们的功能,这时,各个功能模块间联系的紧密度就可以理解为我们常说的耦合度。例如:内容耦合 、公共耦合等。
2.为什么要解耦
我们常听到,编写程序要做到“高内聚,低耦合”。“高内聚”是要我们在编写程序时,每个功能模块可以专注的完成一个功能。而“低耦合”是指我们在编写程序时,尽量减少模块间的联系。然而,为什么要这样做呢?
在程序设计开发时,我们的理想状态是将每一个功能模块都积木化,即我们可以将功能模块互相组合,从而实现我们的功能。这样做的好处有很多:
- 1.代码复用率大大提高的,从而提高了实现功能的效率。换句话来说,我们需要再搭一个房子,我们可以直接使用现成的积木而非重新再构造一个搭房子的积木。
- 2.提高我们程序的维护性。还是用搭房子的例子来说,当我们搭好的房子需要维护时,低耦合的理想状态可以做到撤掉一个积木,换上另一个接口匹配的积木后房子依旧是房子。但如果这些积木是高耦合的(可以理解为积木之间互相有着连线)那么在我们撤掉一块积木时,整个房子有可能面临着坍塌,这样就导致了我们的搭建效率大大降低。
3.如何进行解耦
理解了为什么要解耦,接下来让我们探索如何尽量做到“高内聚,低耦合”。
-
1.其实在我们程序员社会中,以及有很多人帮助我们尽量简化降低耦合度的步骤了,我们学习的各种框架、设计模式,在帮助我们简便开发的同时,无形之中也让我们的程序实现了低耦合。我们可以认真学习这些框架、设计模式。
-
2.使用反射来创建对象,避免使用new来创建对象。这个方法在我们使用JDBC时就有所体现了:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
在注册驱动时,上一行代码依赖于一个具体的驱动类,这种依赖于一个具体类的方式耦合度告,不推荐使用。我们通常会使用下面这行代码来实现注册驱动,在这里"com.mysql.jdbc.Driver"仅仅标识一个字符串,耦合度低。
Class.forName("com.mysql.jdbc.Driver");
-
3 .设立接口。接口有利于清晰模块间的依赖,使依赖趋于稳定。依赖于一个固定的接口,而非具体的类,从而降低了耦合。
-
4.避免使用全局变量。全局变量在程序中会无形之中增加不同函数间的耦合,从而降低了程序的耦合度。
-
5.等待补充——————————————————————————————