目录
- 程序的耦合和解耦
- 使用spring的ioc解决程序耦合
一、什么是程序的耦合和解耦
耦合:描述程序间的依赖关系,类、方法间的依赖关系。划分模块的依据就是高内聚低耦合
解耦:降低程序间的依赖关系,只能降低,不能完全消失
在实际开发中,我们往往减少编译期的依赖,尽量在运行期依赖。
实例说明程序间的耦合:
-
项目架构:
-
代码:
/**
* 表现层实现类
*/
public class Client {
public static void main(String[] args) {
IAccountService as=new AccountServiceImpl();//表现层调用业务层,类之间相互依赖,具有耦合性
as.saveAccount();
}
}
/**
* 业务层接口
*/
public interface IAccountService {
public void saveAccount();
}
/**
* 业务层实现类
*/
public class AccountServiceImpl implements IAccountService {
IAccountDao accountDao =new AccountDaoImpl();//业务层调用持久层,类之间相互依赖,具有耦合性
@Override
public void saveAccount() {
accountDao.saveAccount();
// System.out.println("业务层保存账户方法");
}
}
/**
* 持久层接口
*/
public interface IAccountDao {
void saveAccount();
}
/**
* 持久层实现类
*/
public class AccountDaoImpl implements IAccountDao {
@Override
public void saveAccount() {
System.out.println("持久层保存账户方法");
}
}
- 运行结果
- 其中表现层调用业务层的类创建对象,业务层调用持久层的类创建对象,类之间具有依赖关系,若将其中一个类删掉,则程序会运行报错,所以我们项目代码模块划分时要求低耦合
二、解耦的思路
方法一:工厂模式解耦
在实际开发中,我们往往将三层的对象都使用配置文件配置起来,当启动服务器应用时,用一个类中的方法来读取配置文件,创建对象并存起来,在接下来使用时,之间拿过来用就好。这个读取配置文件,创建对象并存起来,获取对象的方法就是工厂。
第一个:需要一个配置文件来配置我们的service和dao
配置的内容:唯一标识=全限定类名(key=value)
第二个:通过读取配置文件中配置的内容,反射创建对象
我们的配置文件可以是XML也可以是properties
实例:
- 项目架构
- 代码
配置文件:bean.properties
/**
* 业务层接口
*/
public interface IAccountService {
public void saveAccount();
}
/**
* 业务层实现类
*/
public class AccountServiceImpl implements IAccountService {
// IAccountDao accountDao =new AccountDaoImpl();//业务层调用持久层,类之间相互依赖,具有耦合性
IAccountDao accountDao= (IAccountDao) BeanFactory.getBeans("accountDao");
@Override
public void saveAccount() {
System.out.println("业务层保存账户方法");
accountDao.saveAccount();
// System.out.println("业务层保存账户方法");