简单聊聊java中接口的解耦合

       最近在复习java准备实习了,对于接口的解耦合我想把自己理解的跟大家分享一下,我把挺重要的字段标为红色了,欢迎指正啦

       耦合性,是系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。

简单说,就是各模块之间的依赖程度。举个栗子,有一个People类和一个Basketball类,要是想打篮球的话,就在People类

 中创建一个Basketball类实例,即Basketball b=new Basketball();这种写法的不足在于直接在People类中new了一个对象,这样使得People类和Basketball类的依赖程度很高,,一旦Basketball类发生改变,People类中所有关于Basketball的都要改变。如果不够形象,我们还可以举个吃饭的例子。我们虽然对大米非常依赖,但应该没人直接去米厂里面买大米吧?都是米铺从大米厂进货,然后我们才去米铺里面挑选想要的大米。而“米铺”的作用就是接口,我们就不用亲自去米厂买米了。

        回到上面的栗子,那为了降低耦合,接口就发挥作用了。我们可以创建个Sport接口,接口中写个play方法,让各种运动类比如Swing,Run来实现这个接口并重写play方法;peole类要是想做运动,就把接口作为属性注入到People类中,然后想玩什么运动只需要把实际参数传入do方法中(多态,方法参数类型是Sport),然后在do方法中调用各个参数的play方法就好。站在People类的角度,就只用关心这个方法,至于玩什么运动它并不关心,People与各种运动类的依赖就大大减小

Interface Sport(){
  void play();  
}
//游泳和跑步都是运动,都实现这个接口
Class Swing implement Sport{
   void play(){
      System.out.print("游泳好好玩");
   }  
}


class Run implement Sport{
    void play(){
        System.out.print("跑步好好玩");
    }  
}

//要运动的人
class People{
  Sport sport;//用接口声明,我们不知道,也不用知道,我们想做什么运动,我们不依赖于任何类型的运        
                动,我们只依赖于这个接口

  void do(Sport sport){
       sport.play();
  }

  void set(Sport sport){
       this.sport=sport;
  }

  public static void main(String[] args){
    People p=new people();
    Sport s1=new Run();
    p.set(s1);
    p.do(s1);
  }  
  

其实 Iterator 迭代器接口也是很好的一个解耦例子啊,使得客户端不需要了解集合的内部结构就可以遍历集合元素

(以上代码可能有错,但主要想表达思路滴,欢迎指正哈)

你可能感兴趣的:(简单聊聊java中接口的解耦合)