spring的设计中学OOP的设计
为什么要深究spring,博主是为了学习spring的源码设计,学习OOP框架设计的思想,OOP的五大原则如下
开闭原则是目的。--“Software entities should be open for extension,but closed for modification”。
依赖倒置为手段。--“面向接口编程。 不要面向具体实现,要面向抽象进行编程”
里氏代换原则是继承复用的基石。--“子类可以替换掉基类,功能不受到影响”
接口隔离原则是实现迪米特法则的手段之一。--“使用多个专门的接口比使用单一的总接口要好,不要形成臃肿的大接口”
迪米特法则。-- “最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解”
在Spring中,
开闭原则,最经典IOC的是bean创建,对于bean的创建直接过程是禁止修改的,但是预留了很多接口用于扩展,比如factoryBean用于自己完全扩展bean(如在hibernate中的LocalSessionFactory,AOP中的工具类TransactionProxyFactoryBean),*PostProcessor应用于创建时修改前后,*Aware应用于获得本身。其它扩展接口http://www.iteye.com/topic/1122937
依赖倒置原则,spring中都是用于接口编程
里氏代换原则,Util包Resource接口实现类ClassPathResource,FileSystemResource,ServletContextResource,UrlResource都可以随意替换而不影响ApplicationContent功能的实现而形成对不同资源的支持。 还有又如BeanDefineReader的两个主要实现类,xmlBeanDefineReader和PropertiesBeanDefinitionReader也是一样的。
接口隔离原则,在spring中每个接口都是有自己的单一责任,所以接口也是最复杂的,比如bean包的设计,beanfactory接口负责对bean的管理,集成接口 HierarchalBeanfactory 可以对双亲factorybean的支持,ListableBeanfactory可以对bean进行list的factorybean,AutowriteCapableBeanfactory支持注册的一个factorybean
迪米特法则, spring中为什么有这么多接口呢, 其实很大一部分也是这个原则的体现, 看每个方法接收的参数都仅仅是它修改所需要用的的范围。每个接口参数都可以限制方法的访问范围