重新梳理SpringIOC里面的设计原则
前言
之前一直想把设计模式写出来但是总感觉写不下去,原因无非在于设计模式的本质还是一种思想,一种技术运用的技巧的沉淀。既然如此不妨从实际的优秀的框架代码去反推理论在其中的运用
设计模式
面向对象的七(或五大原则,前五项)大基本原则:单一职责原则(SRP) 、开放封闭原则(OCP) 、里氏替换原则(LSP)、 依赖倒置原则(DIP)、 接口隔离原则(ISP)、迪米特法则(Law Of Demeter)、组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
依赖倒置原则(Dependecy-Inversion Principle)
其核心思想是:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
我们知道,依赖一定会存在于类与类、模块与模块之间。当两个模块之间存在紧密的耦合关系时,最好的方法就是分离接口和实现:在依赖之间定义一个抽象的接口使得高层模块调用接口,而底层模块实现接口的定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标。
抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。
依赖于抽象是一个通用的原则,而某些时候依赖于细节则是在所难免的,必须权衡在抽象和具体之间的取舍,方法不是一层不变的。依赖于抽象,就是对接口编程,不要对实现编程。
接口隔离原则(Interface-Segregation Principle)
其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来
分离的手段主要有以下两种:1、委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。2、多重继承分离,通过接口多继承来实现客户的需求,这种方式是较好的。
代码案例
不用spring 我们自己做三层分离就可这样
如果dao层变化 我们只需要改变new的对象就可以了,不会影响下面具体方法的执行,这里就通过接口把dao层和servic层隔离开了。
加入spring框架的ioc
配置xml的方式来set注入
而不用代码里面new 接口对应的实现该接口的对象了,但是要实现set方法
体现在代码里面就是这样的了。
显然这里只需要改配置文件就实现了修改,完全体现了依赖配置控制反转
试一把 显然没有问题
IOC是一种思想 把创建对象交给容器去管理 而不是显式的自己去代码管理。而这种管理充分体现了设计模式思想里面的依赖倒置原则与接口隔离原则