`
yueguangyuan
  • 浏览: 337794 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

重新认识IOC & DI -- Head First Design Patterns 读书笔记(二)

阅读更多

    这本书是基于Java来写Patterns实现的,但是很多有多年J2EE程序开发经验的人可能都没有对Patterns有很深入的了解,因为J2EE基本上都是一个MVC的模式就全部搞定了,开发的时候层次完全划分好,即便是有一些继承的类或者借口也都是项目组中一、二个“牛人”写好大家遵照着做就可以,我想这也是Patterns对于国内程序员一直都很陌生而且不易于理解的原因吧。

     所以一提到设计模式,几乎所有做J2EE的程序员第一时间想到的都是Factory Method,让举个例子就是Singleton method,然后再深入说说使用工厂模式有什么好处呢,就开始支支吾吾。我就是这样,而我所接触的一些程序员和我面试过的一些人无不如此 :P,也许冥冥中注定大家都只是打字员的命,那些高深的东西都留给所谓的大师去做好拉!(不知道大家怎么去考虑这个问题)

     虽然说了解最多的就是Factory Method,但是在仔细阅读了书中的Factory Method和Singleton Method之后,发现自己还是非常嫩 :(。特别是通过这次阅读学习,偶发现我以前对IOC和DI的理解也是错误的,一道纠正写在这里好了。

所有语义、使用场景和优点在读书笔记一中进行总结。

     一、Factory Method 

     首先发现的一个我常犯的错误就是:抽象工厂不是将工厂方法抽象出来。因为从来没有实际操作过,所以一直以为Abstract Factory是将Factory mothod抽象出来的Abstract class,实际上他们直接并没有直接联系,Abstract Factory只是一个接口类,其中定义了若干个对象的创建,然后由其他类实现以达到解藕的目的而已。工厂方法仍然是我们所熟悉的那个为避免过多的使用new创造对象而将创建过程提取出来的那个Pattern,而且通常情况下工厂方法是使用的抽象类,并在其中定义一个抽象方法来实现的,目的是为了解偶,当然,有时候也可是直接将创建方法写进具体的类里面。使用工厂方法一般是在只需要一个固定的构造器的时候用来解偶用的,那么当你增加产品或者修改产品的实现的时候,它不会影响到你的构造器,因为构造器并没有紧耦合。

     二、 Abstract Factory Method

     而抽象工厂模式则提供一个接口来创建一组有关联的对象而不去指定它们的具体实现类,而我们最常见的就是Spring中的Inversion of control。在以往使用Spring的过程中我一直没有能将IOC这个概念吃透,虽然这并不影响使用,但是每当我想说服他人使用Spring的时候或讲解其机理的时候就会非常的吃力,而现在我有一点小感想了,IOC只是一个抽象工厂的实现,那么什么控制反转、什么依赖注入这种生涩的概念我就可以先不予考虑,它首先就是一个抽象工厂的实现,创造一组对象的接口而没有指明具体的实现类(这样考虑感觉一下就容易多了)。具体的解释可以参照老马的经典文章:http://martinfowler.com/articles/injection.html,那么从这里可以得知,实现依赖注入他推荐使用构造方法的注入,而在不能满足条件的情况下使用set方法设值注入,而Spring选择的就是set方法,可能这个就是让我们不好理解的地方,因为我们是先学写代码后学框架然后才学Patterns(不知道其他人是否也是这个顺序),或者说对代码、框架有了一定了解后才有了对Patterns的了解。

     三、IOC & DI

     那么我们就从IOC这个抽象工厂开始,书中提出一个简单的例子让我们了解了抽象工厂的用意就是使用接口来指定构造那些对象而没有指定具体的实现类,以达到解偶的目的,使得对象的使用者并不知道最终调用的具体类,而是在运行期动态的注入了一个实现该工厂接口的值来决定最终调用哪个类去实现。这就是书中对Inversion of control的解释,也就是说low level component方向控制了high level component,达到控制反转的目的。然后我们翻开很久以前就熟读过的SpringGuide文档,发现这里面对IOC还有另外一种解释,就是用容易控制了程序之间的关系,而非传统实现中,由程序代码直接操控。这样控制反转的两种方式就出现了,也就是先前老马在文中所说:IOC的实现可以通过两种途径,一是通过编码、二是通过配置文件。(这个地方可能还有些出入,需要更深入的学习和讨论才会有更深入、准确的理解)

     四、Singlton Factory

     尽管我们对构造Singlton Factory可能很熟练,但是书中还是很详细的写出3种构造方法,并由最简单的方式逐渐提出新的需求和问题以讲述我们到底需要哪种方式。

     比如我们经常会看到的public static synchronized Singleton getInstance() 中的没一个关键字都进行了解释,以及性能问题,三种构造方法都是有不同的场景,而且都有相应的问题,并告诉我们:当你需要它的时候先选择一种合适的使用,如果出现问题,再根据需求进行修改就可以了。

分享到:
评论

相关推荐

    笔记28-JAVAEE之Spring IoC&DI

    JAVAEE之Spring IoC&DI Spring IoC(Inversion of Control,即控制反转)是Spring框架的核心机制之一,它提供了一种解耦合的方式,使得应用程序的各个组件之间能够松散耦合,提高了系统的灵活性和可维护性。 在传统...

    Spring5 框架 ---- IOC容器 ---- 代码

    Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...

    Spring-IoC-DI-main

    标题“Spring-IoC-DI-main”提示我们讨论的核心是Spring框架中的两个核心特性:控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)。这两个概念是Java开发中的重要基石,尤其在构建大型...

    什么是Ioc和DI

    ### 什么是控制反转(IoC)与依赖注入(DI) #### 控制反转(IoC) 控制反转(Inversion of Control,简称IoC)是软件工程领域的一个设计模式,主要用于简化对象之间的依赖关系管理。在传统的面向对象编程中,对象间的...

    spring练习项目.7z

    资料包含spring-iocdi-annotation-document,iocdi-annotation-mvc,iocdi-xml-extend,iocdi-annotation-extend proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-...

    tapestry-ioc-5.0.3-src

    Tapestry IOC(Inversion of Control)是该框架的一部分,专注于依赖注入(DI)和服务定位,使得代码更加解耦,易于测试和维护。在"tapestry-ioc-5.0.3-src"这个压缩包中,我们可能找到Tapestry IOC框架的源代码,这...

    Ioc模式解析 - JAVA - 技术天地 - 赛迪网.htm

    Ioc模式解析 - JAVA - 技术天地 - 赛迪网.htm

    IOC835芯片 MM-PIO835-1P驱动程序 解压密码:hebeiww

    PCI并口卡 PCI转打印并口DB25接口扩展卡 IOC835芯片驱动 功能描述: 在具备PCI插槽的电脑上扩展出1个DB25并口 规格说明: 符合PCIRev2.1协议 传输率最大可达1.5 Mbytes/sec 1个DB25并口接头 符合标准的带16byte接收...

    spring-demo02-IOC-DI案例.zip

    Spring 框架是 Java 开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection, DI)和控制反转(Inversion of Control, IOC)特性而闻名。在这个名为“spring-demo02-IOC-DI案例”的压缩包中,我们将...

    springIOC和DI

    什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码

    DesignPatterns.pdf_objects_designpatterns_

    标题中的"DesignPatterns.pdf_objects_designpatterns_"暗示了这可能是一个关于面向对象设计模式的PDF文档,而描述中的"Design patterns elements of reusable objects"进一步确认了这一点。设计模式的核心理念在于...

    基于JSON和IoC的AJAX-RMI插件.pdf

    "基于JSON和IoC的AJAX-RMI插件" 基于JSON和IoC的AJAX-RMI插件是解决Ajax异步JavaScript和XML(AJAX)客户端与服务组件之间的通信阻抗问题的解决方案。该插件使用JSON数据交换和IoC容器,实现了JavaScript与容器内服务...

    IOC控制反转&DI依赖注入

    在软件开发领域,IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是两种重要的设计模式,特别是在Java和Spring框架中被广泛使用。这些概念有助于提高代码的可测试性、可维护性和模块...

    Ioc, DI demo

    【描述】:“Ioc, DI demo, IocPerformance-master”这个描述可能指的是一个示例项目,它演示了如何使用Inversion of Control (IoC)和Dependency Injection (DI)原则,特别是通过“IocPerformance-master”这个...

    Spring-IOC笔记

    spring-IOC的一些笔记心得

    Python库 | ioc_finder-6.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:ioc_finder-6.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    spring-framework-4.3.8.RELEASE-dist & commons-logging-1.2 最简打包

    2. **spring-core-4.3.8.RELEASE.jar**:该模块包含了Spring的基本功能,如IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。它提供了一种强大的对象封装和类型转换机制...

    Spring IoC简单示例-注解配置-Maven构建

    在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...

    Spring_IOC-v(上)笔记

    Spring_IOC-v(上)笔记 Spring_IOC-v(上)笔记是关于 Spring 框架中的 IoC(控制反转)技术的笔记,主要介绍了 IoC 的概念、依赖注入、Bean 的设置、Spring 组件的管理等知识点。 IoC 技术是 Spring 框架的...

Global site tag (gtag.js) - Google Analytics