天天看点

Spring中的IOC降低耦合性的理解

学到Spring老师一定会讲一句话:IOC能够降低耦合性。可是为什么会降低耦合性,许多老师就讲不清了,下面我们通过举一些栗子来说明为什么IOC能够降低耦合性。

第一层-传统方式

通常我们写java程序都是通过实例化来获取对象,代码如下:

Dog dog = new Dog();
dog.woof();      

如果我们想要将Dog换成Cat,就需要在所有的程序中将Dog dog = new Dog()换成Cat cat = new Cat().除此之外,cat对象没有woof方法,而是具有bark方法,那么所有程序基本上等于白写了,你需要在所有程序中找到实例化dog对象的语句,然后将其替换成实例化cat对象,然后还要找到使用了dog对象的地方,删除woof方法的调用.也就1000多处声明,1000多处调用,今天和明天加加班就能搞完!!!加油!!!奥里给!!!

第二层-接口

有个小天才说,我们约定好一些公用的方法,大家都去实现它,不就可以任意切换了吗?对这就是接口.

代码如下:

Animal animal = new Dog()
animal.bark();      

好了现在我想把Dog换成Cat,只需要将所有的new Dog()换成new Cat()就行了,只需要在所有的程序中寻找Dog就好.也就如果你有1000个类,只需要今晚加加班就能搞定!!!加油!!!奥里给!!!

接口能够一定程度上降低代码的耦合度,接口就像一个插头面板,面板后面可以接火线也可以接零线.正是这个面板,让我们可以在符合标准的线之间任意切换.

第三层-工厂模式

又有一个小天才相出了一个绝妙的主意,我去构造一个既能生产Dog对象又能生产Cat对象的类不就更爽歪歪?

代码如下:

class AnimalFactory{
  AnimalFactory(){}
  public static Animal getInstance(String type){
    Animal result = null;
    if("dog".equals(type)){
      result = new Dog();
    }
    if("cat".equals(type)){
      result = new Cat();
    }
    return result;
  }
}      
Animal animal = AnimalFactory.getInstance("dog");
animal.bark();      

这种方法把创建对象的过程交给了一个专业的类(Factory),我只需要告诉他我需要什么(参数),他就会返回给我正确的对象.但是他并没有解决我的声明语句七零八落的散落在程序中,现在我只能全文搜索一下,把所有的参数从dog换成cat.

但有了替换程序,我只需要裁定一下是否替换,两个小时应该可以搞定,今晚晚下班一会应该可以搞定!!!

第四层-反射

后来又有个大天才,他想到一个更绝妙的主意.我在写程序的时候不告诉工厂我需要什么,等到运行的时候我再告诉工厂我需要什么,你再给我生产出来不就可以了吗?

Animal animal = AnimalFactory.getInstance(我想要的你去config中读取);
animal.bark();      
我想要的 = dog      

好了,工厂要生产什么全部都写在了一个文件中,我只需要利用反射技术,在运行时再去读取要工厂生产的东西即可.这样如果我不希望生产dog了,只需要修改配置文件中dog->cat即可,只修改一处就行了.只需30秒,今晚不加班!!!

就这样我们通过四个层次降低了代码之间的耦合度了吗?

总结