首页 > 编程知识 正文

耦合电感解耦,耦合原则

时间:2023-05-04 12:31:34 阅读:151567 作者:2719

合并和取消合并程序

偶联反应

指程序之间的依赖关系,如类之间的依赖关系和方法之间的依赖关系

解除结合

应该降低程序之间的依赖关系,使其在实际开发中不依赖于编译器,而依赖于运行时

解除结合的想法

使用反射创建对象,但不使用new关键字

读取配置文件以获取要创建的对象的全限定类名

举个例子

让我们看一个简单的例子。 模拟帐户的保存

项目的文件结构如图所示

业务层接口及其实现类:

package com.itheima.service;

//*

* @Author:Zzq

* @Description:帐户的业务层接口

* @Date:2020/6/13

* @Time:15:50

*/

publicinterfaceiaccountservice{

//*

*@Author:Zzq

*@Description:伪存储帐户

*@Date:2020/6/13

*@Param: * @param null

*/

void保存帐户(;

}

package com.it heima.service.impl;

import com.it heima.factory.bean factory;

import com.it heima.mapper.iaccountmapper;

import com.it heima.service.iaccount service;

//*

* @Author:Zzq

* @Description:账户的业务实现类

* @Date:2020/6/13

* @Time:15:53

*/

publicclassaccountserviceimplimplementsiaccountservice

privateiaccountmapperaccountmapper=newaccountmapperimpl (;

@Override

公共语音保存帐户

accountMapper.saveAccount (;

}

}

持久层的接口及其实现类

package com.itheima.mapper;

//*

* @Author:Zzq

* @Description:帐户持久层界面

* @Date:2020/6/13

* @Time:16:08

*/

公共接口iaccountmapper {

void保存帐户(;

}

package com.itheima.mapper.impl;

import com.it heima.mapper.iaccountmapper;

//*

* @Author:Zzq

* @Description:帐户的持久层实现类

* @Date:2020/6/13

* @Time:16:10

*/

publicclassaccountmapperimplimplementsiaccountmapper {

公共语音保存帐户

System.out.println ('已保存);

}

}

最后是main函数,也是其表示层

package com.itheima.ui;

import com.it heima.factory.bean factory;

import com.it heima.service.iaccount service;

//*

* @Author:Zzq

* @Description:模拟用于调用业务的表现层

* @Date:2020/6/13

* @Time:22:28

*/

公共类客户端{

publicstaticvoidmain (string [ ] args ) {

accountserviceimplas=newaccountserviceimpl (;

as.saveAccount (;

}

}

从代码中可以看出,各层次相互依存、分层应用,这被称为高结合,各代码块的

间独立性较差,下面就按照解耦的思路来尽可能降低耦合,如下:

1.在项目文件中新建一个factory包,新建一个BeanFactory类来建立一个bean工厂来创建我们的service和mapper对象,并写好Bean.properties配置文件

package com.itheima.factory;

import java.io.InputStream;

import java.util.Properties;

/**

* @Author:Zzq

* @Description:是一个创建bean对象的工厂

*

* Bean:在计算机英语中,有可重用组件的含义。

* JavaBean:用Java编写的可重用组件。

* Java >> 实体类

* 它就是创建我们的service和mapper对象的。

* 1.需要一个配置文件来配置我们的service和mapper

* 配置的内容:唯一标识 = 全限定类名(key = value)

* 2.通过读取配置文件的配置内容,反射创建对象

*

* 配置文件可以是xml也可以是properties

* @Date:2020/6/13

* @Time:22:36

*/

public class BeanFactory {

//定义一个properties对象

private static Properties props;

//使用静态代码块为Properties对象赋值

static {

try {

//实例化对象

props = new Properties();

//获取properties文件的流对象

InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");

props.load(in);

}catch (Exception e) {

throw new ExceptionInInitializerError("初始化properties失败");

}

}

/**

*@Author:Zzq

*@Description:根据bean的名称获取bean对象

*@Date:2020/6/13

*@Param: * @param null

*/

public static Object getBean(String beanName){

Object bean = null;

try {

String beanPath = props.getProperty(beanName);

bean = Class.forName(beanPath).newInstance();

}catch (Exception e){

e.printStackTrace();

}

return bean;

}

}

accountService = com.itheima.service.impl.AccountServiceImpl

accountMapper = com.itheima.mapper.impl.AccountMapperImpl

2.修改Client.java和AccountServiceImpl.java代码,使用反射来创建对象

package com.itheima.ui;

import com.itheima.factory.BeanFactory;

import com.itheima.service.iAccountService;

/**

* @Author:Zzq

* @Description:模拟一个表现层,用于调用业务

* @Date:2020/6/13

* @Time:22:28

*/

public class Client {

public static void main(String[] args) {

iAccountService as = (iAccountService) BeanFactory.getBean("accountService");

as.saveAccount();

}

}

package com.itheima.service.impl;

import com.itheima.factory.BeanFactory;

import com.itheima.mapper.iAccountMapper;

import com.itheima.service.iAccountService;

/**

* @Author:Zzq

* @Description:账号的业务实现类

* @Date:2020/6/13

* @Time:15:53

*/

public class AccountServiceImpl implements iAccountService {

private iAccountMapper accountMapper = (iAccountMapper) BeanFactory.getBean("accountMapper");

@Override

public void saveAccount() {

accountMapper.saveAccount();

}

}

以上就是解耦的过程,在使用了BeanFactory了之后,就算是删除掉了service或mapper文件,编译器也不会报错,有人看到这里肯定会说:啊,你这不是脱裤子放屁嘛,明明几个类就能解决的问题非要弄个工厂?其实是这个例子太高简单,还不足以看出低耦合的好处,在以后比较大型的开发中,如果有新的需求要加入,我们就可以只添加几个类就能完成,而不用重新考虑整个程序,避免牵一发而动全身。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。