控制反转

是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
----来自百度

工厂

使用工厂依赖来对对象注入依赖。


没有使用工厂模式前

使用了工厂模式之后

Beans.properties配置文件

工厂将解析properties配置文件获取到对应的keyvalue
在工厂类中使用java反射技术来在程序运行期间注入依赖创建对象。

User=com.domain.User
ISelimpl=com.dao.Impl.ISelimpl
IUserSelimpl=com.service.Impl.IUserSelimpl

beansFactory 工厂类

package com.factory;import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;public class Beasfactory {private static Properties properties = null;private static Map<String, Object> beans = null;static {try {properties = new Properties();//使用类加载器获取Properties的流对象InputStream in = Beasfactory.class.getClassLoader().getResourceAsStream("Beans.properties");properties.load(in);beans = new HashMap<String, Object>();final Enumeration keys = properties.keys();while (keys.hasMoreElements()) {String key = keys.nextElement().toString();String beanpath = properties.getProperty(key);Object value = Class.forName(beanpath).newInstance();beans.put(key, value);}} catch (Exception e) {//ExceptionInInitializerError 它继承的是一个Error 会直接终止程序throw new ExceptionInInitializerError("初始化失败");}}/*** 获取单例对象** @param beanName* @return*/public static Object getBean(String beanName) {return beans.get(beanName);}
}

在工厂类中我们使用Map来存储对象,这样我们在需要使用这些对象时直接获取对象,不需要重新创建对象,降低了JVM的负担,这就是单例对象,其他类在调用该对象时都是获取它的引用,本质上都是同一个对象(内存地址相同)。

实例

package com.service.Impl;import com.dao.ISel;
import com.dao.Impl.ISelimpl;
import com.factory.Beasfactory;
import com.service.IUserSel;public class IUserSelimpl implements IUserSel {public void userSelAll() {ISel sel= (ISelimpl)Beasfactory.getBean("ISelimpl");sel.selAll();}
}

工厂模式降低了程序的耦合性,提高了程序的独立性,逻辑性也更强了,调用关系也明朗了。

工厂模式解耦---控制反转相关推荐

  1. Spring学习(2)-程序间耦合和工厂模式解耦

    程序的耦合及解耦 本文目录 程序的耦合及解耦 1.什么是程序的耦合 2.解决程序耦合的思路 3.工厂模式解耦 4.控制反转-Inversion Of Control 5.使用 spring 的 的 I ...

  2. 【Spring】工厂模式解耦

    问题: 程序的耦合    耦合:程序间的依赖关系    包括:类之间的依赖       方法之间的依赖 解耦:降低程序之间的耦合关系    实际开发:编译期不依赖,运行期才依赖    解耦思路:    ...

  3. 曾经案例中问题 与 工厂模式解耦

    一个创建Bean对象的工厂 * Bean:在计算机英语中,有可重用组件的含义. * JavaBean:用java语言编写的可重用组件. *      javabean >  实体类 * *   ...

  4. 工厂模式解耦的升级版

    package com.learn.service;/*** 账户业务层的接口*/ public interface IAccountService {/*** 模拟保存账户*/void saveAc ...

  5. Java 控制反转和依赖注入模式【翻译】【整理】

    Inversion of Control Containers and the Dependency Injection pattern --Martin Fowler 本文内容 Component ...

  6. 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯

    目录 智能家居工厂模式整体设计框架 继电器控制灯代码 contrlEquipments.h 文件(设备类) mainPro.c 文件(主函数) bathroomLight.c 文件(浴室灯) seco ...

  7. Spring底层控制反转解耦合(IOC)

    简单的例子解释IOC控制反转进行解耦合 一.相关概念 (1)解耦合 解耦合就是把程序中互相不相关或有限相关的模块分割开来,把不同模块互相之间的关系用接口进行准确定义,解耦前,两个模块之间共享所有信息: ...

  8. Spring入门——控制反转是什么鬼

    最近学了Spring 但一直没整理,趁着空档整理一下吧! 在正式开始Spring的学习前,我们先来认识几个概念 什么是Spring Spring是一个家族体系(spring的全家桶),可以完成Java ...

  9. Spring学习:IOC控制反转

    一.Spring概述: Spring是一个开源框架,其存在的根本使命就是简化JAVA开发.为了降低JAVA开发的复杂性,Spring采取了以下四种关键策略: 基于POJO的最轻量级和最小侵入性编程: ...

最新文章

  1. Linux防止SSH暴力破解
  2. Javascript 判断网页横竖屏
  3. Android互联网访问,get方式,post方式等方式
  4. Oracle 11g 新特性简介
  5. html 在tomcat中访问不到_安全服务之安全基线及加固(四)Tomcat篇
  6. 在php中页面布局 3列左右侧固定中间自适应居中,css三列布局--两边固定中间自适应和中间固定两边自适应...
  7. HTML5 装饰Canvas中图形
  8. mysql 机器复制_MySQL复制在同一台机器上
  9. python中的exec()函数和eval()函数
  10. vue修改数组元素方法
  11. 目前使用的python版本_Python版本到底有多少种?
  12. 记一次windows下安装部署运维监控系统WGCOUD的步骤
  13. https://juejin.im/post/5ae081aaf265da0b767d263a
  14. 台式机Ubuntu系统安装Tesla系列显卡+深度学习环境搭建
  15. el轮播图片image单张图比例缩放及多张图宽度固定高度等比例自适应展示;
  16. Mac直接拔掉移动硬盘无法识别或识别要很久的解决方法
  17. Matlab 图像转极坐标系
  18. 毕业设计 基于云平台的火灾报警系统设计与实现 - stm32 物联网 单片机 OneNET云平台
  19. java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist 解决方法
  20. 微信小程序开发(十二)富文本插件wxParse的使用

热门文章

  1. 20个编写现代CSS代码的建议
  2. [转]Anaconda
  3. JVM(三)——对象的访问定位
  4. Kubernetes Master High Availability 高级实践
  5. Intent, Bundle, ListView的简单使用
  6. 制作openstack-centos镜像
  7. pytorch 测试每一类_2D-UNet脑胶质瘤分割BraTs + Pytorch实现
  8. nginx 413 Request Entity Too Large
  9. Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job
  10. 新年快乐轮播特效html,基于owl-carousel的卡片水平轮播展示特效