耦合与内聚
首先,我们需要从耦合与内聚这2个点开始说起,这跟IOC出现的原因有很大的关系,了解过一定规范的小伙伴应该知道,我们在写代码的过程当中,最好要避免高耦合这个点,因为当高耦合出现时,也就是代码之间的间隙是非常紧凑的,经常会出现变更一个点的情况下,其他的点也需要变更,那么这对维护其实是一件非常恐怖的事情.
举例一个比较常见的场景:
UserServiceImpl
publicclassUserServiceImpl {
publicvoidsave(){
UserDaouserDao=newUserDaoImpl();
// UserDao userDao = new UserDaoImpl2();
userService.save();
}
}
UserDaoImpl
publicclassUserDaoImplimplementsUserDao {
publicvoidsave(){
System.out.println("dao原始实现类");
}
}
UserDaoImpl2
publicclassUserDaoImpl2implementsUserDao {
publicvoidsave(){
System.out.println("dao新的实现类");
}
}
在上面的代码当中,我们发现如果我们需要修改dao层的实现类,那么业务层的dao可能也要随之发生更改,这就是最简单的高耦合案例,可能很多童鞋现在看起来挺简单的改一处就好,但是在实际开发当中,我们可能就不止改一处了.
工厂模式的诞生
在这种情况下,我们的工厂模式诞生了.
UserServiceImpl
publicclassUserServiceImpl {
publicvoidsave(){
UserServiceuserService=UserServiceFactory.getInstane();
userService.save();
}
}
UserDaoFactory
publicclassUserDaoFactory {
publicstaticUserDaogetInstane(){
returnnewUserDaoImpl();
//只需要修改返回值即可完成全局的修改,相对上一种方法来说 只需修改一处代码
}
}
UserDaoImpl
publicclassUserDaoImplimplementsUserDao {
publicvoidsave(){
System.out.println("dao原始实现类");
}
}
UserDaoImpl2
publicclassUserDaoImpl2implementsUserDao {
publicvoidsave(){
System.out.println("dao新的实现类");
}
}
但是,还能不能再次变的更简单呢?
答案是可以的!
接下来就轮到我们今天的主题IOC重磅登场了!
Spring雏形模式
上面这三步不仅是Spring一步步慢慢进化的本质,也是人类思想的变迁,主流框架或许会变,但是我觉得如果我们能够多掌握一些底层的话,那也能够做到所谓的无招胜有招吧,这是一段学习的过程,借此分享给大家!