当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 使用工厂模式解耦和IoC思想

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

2019年03月30日  | 移动技术网IT编程  | 我要评论

使用工厂模式解耦。

一、需求场景:

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

  • 实现类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,面向切面编程

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网