欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用工厂模式解耦和IoC思想

程序员文章站 2022-05-18 22:37:40
使用工厂模式解耦。 一、需求场景: 某一层功能需要改动,但其他层代码不变 实现类1: 查询自己的数据库. ====改为==== 实现类2: 从其它地址得到数据. 二、步骤: 1.创建一个 类,Bean工厂 2.解决硬编码问题,进一步优化解耦 提供一个配置文件: 内容: 三、理论 1.导入 使用接口开 ......

使用工厂模式解耦。

一、需求场景:

某一层功能需要改动,但其他层代码不变

  • 实现类1:mydaoimpl查询自己的数据库.

    ====改为====>

  • 实现类2:mydaoimpl2从其它地址得到数据.

二、步骤:

1.创建一个beanfactory类,bean工厂

service层:
private mydao dao = beanfactory.getbean();

class beanfactory{
    public static object getbean(){
        class clazz = class.forname("com.mysite.dao.impl.mydaoimpl");//有硬编码问题
        object obj =clazz,newinstance();
        return obj;
    }
}

2.解决硬编码问题,进一步优化解耦

  • 提供一个配置文件:beans.properties

  • 内容:mydao=com.mysite.dao.impl.mydaoimpl2

//解决硬编码问题,进一步解耦
service层
private mydao dao = beanfactory.getbean("mydao");

class beanfactory{
    public static object getbean(string key){
        //读取beans.properties文件,得到properties properties;
        properties properties = beanfactory.class.
        string clazzname = properties.getproperty(key);
        class clazz = class.forname(clazzname);
        object obj = clazz.newinstance();
    }
}

三、理论

1.导入-----使用接口开发:

  • 好处:方便进行功能拓展,提供新的实现类,提供新功能
  • 问题:service层里创建dao对象的代码需要随之调整
  • 层与层之间耦合性比较强

2.解决思路:

  • 在service层创建对象时,使用反射创建对象,
  • 提供一个配置文件: key对应dao的全限定类名
  • 想创建什么dao,就提供一个key,通过beanfactory类得到key对应的dao对象.
  • 好处:
    • dao再拓展,又增加了新的实现类.我们只需要修改配置文件即可.
    • 其它service代码、beanfactory代码都不需要变更.
  • 耦合性降低了

3.工厂模式

spring框架的两大核心

ioc:inversion of control,控制反转,解耦
  • 由原来主动创建对象,变成被动接收对象.把创建对象的控制权交出去了.
aop: aspect oriented programming,面向切面编程