静守时光 2013-09-23 21:33
浏览 286
已采纳

关于Spring的BeanFacotry及子类,以接口方式却不采用抽象类的疑问

    首先我们说下抽象类和接口的区别。从面向对象的设计理念来看,抽象类是is-a的关系,即子类是父类的一种实现;而接口是行为的集合,即某类应该具有哪些行为,则实现相应的接口,类似“has-a”的关系。

    但Spring的IOC容器的核心BeanFactory,是具有最基本功能的工厂容器,其所有的子接口和子类如ApplicationContext、FileSystemXmlApplicationContext则是有各种各样功能的工厂容器,和BeanFactory应该是Is-a的关系,所以对BeanFactory及其容器子接口应该是抽象类来实现,而不是接口。

    但为什么Spring设计者把它们设计为接口呢?

  • 写回答

1条回答 默认 最新

  • zhujihuaalice 2013-09-24 10:03
    关注

    首先我觉得像spring这样的庞大的开源框架的设计理念,并不会完全遵守,一些常用的准则,肯定有自己独到之处,java中不支持继承多个抽象类,却支持接口的继承和扩展,这样,对于一个接口有若干继承接口,在java中就是很正常的事情,就像spring中beanfactory有很多的继承接口,这些接口大多数面向不同的环境,不同的使用场景,就相当于把spring核心容器接口提供的功能,通过定义不同接口的方式来做了汇总归类,降低了使用接口的复杂度,我所知道的spring中有相当部分的属于接口方法,但是却不适合向普通用户公开,这样,通过一个子接口就隐藏了这部分接口代码,同时又符合面向接口的设计。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型