zoukankan      html  css  js  c++  java
  • 使用工厂模式解耦和IoC思想

    使用工厂模式解耦。

    一、需求场景:

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

    • 实现类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,面向切面编程
  • 相关阅读:
    Redis学习笔记之一 : 配置redis
    Web 项目更改项目名
    Linux 常用命令之一
    SQL 常用语法一
    Java http请求和调用
    Spring c3p0连接池无法释放解决方案
    Windows和Linux查看和更改mysql连接池
    Java 简单实用方法二
    Linux 更改ssh 端口
    CentOS 通过yum安装web环境
  • 原文地址:https://www.cnblogs.com/mysetsuna/p/10620080.html
Copyright © 2011-2022 走看看