面向对象设计原则六 - 针对接口编程,而不是针对实现编程 - 森林狼 - JavaEye技...

来源:百度文库 编辑:神马文学网 时间:2024/04/29 09:17:16

接口

  • 接口是一个对象中可以被另一个对象调用的一组方法
  • 一个对象可以有多个接口
  • 类型是一个对象的特殊接口
  • 不同的对象可以有相同的类型,一个对象可以有多种不同的类型
  • 一个对象只有通过它的接口才能被其他对象知晓
  • 接口是可插拔的关键

实现继承和接口继承

  • 实现继承(类继承)------ 一个对象的实现定义在另一个对象的实现的基础上
  • 接口继承 ------ 描述了一个对象什么时候可以代替另一个对象使用
  • Java为接口继承提供了专用的结构 - interface
  • Java的接口结构使专注于对象接口的设计更容易实现

接口的优缺点

  • 优点
    • 客户端不知道他们所使用对象的具体类型
    • 一个对象可以被另一个对象轻易地替换
    • 对象不需要硬连接到一个特殊类的对象,因此增加了灵活性
    • 松耦合
    • 增加了重用的机会
    • 增加了组合的机会,因为被包含的对象可以被实现了特定接口的其他对象替换
  • 缺点
    • 某种程度上增加了设计的复杂性

接口实例

Java代码
  1. /**  
  2. * Interface IManeuverable provides the specification  
  3. * for a maneuverable vehicle.  
  4. */  
  5. public interface IManeuverable {   
  6.     public void left();   
  7.   
  8.     public void right();   
  9.   
  10.     public void forward();   
  11.   
  12.     public void reverse();   
  13.   
  14.     public void climb();   
  15.   
  16.     public void dive();   
  17.   
  18.     public void setSpeed(double speed);   
  19.   
  20.     public double getSpeed();   
  21. }   
  22.   
  23. public class Car implements IManeuverable {    
  24.     // Code here.    
  25. }   
  26.   
  27. public class Boat implements IManeuverable {    
  28.     // Code here.    
  29. }   
  30.   
  31. public class Submarine implements IManeuverable {    
  32.     // Code here.    
  33. }  

 

下面的方法只需要知道参数是机动车辆而不需要关心它到底属于哪个类(Car, Boat, Submarine)或者类所在的层次结构。

Java代码
  1. public void travel(IManeuverable vehicle) {   
  2.     vehicle.setSpeed(35.0);   
  3.     vehicle.forward();   
  4.     vehicle.left();   
  5.     vehicle.climb();   
  6. }  

 

 

总结

使用该原则可以带来更灵活的设计,因为当我们想替换一个类的实现时,不需要改变原来的代码。