面向对象的设计原则_针对接口编程

接口

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

实现继承和接口继承

  • 实现继承(类继承)------ 一个对象的实现定义在另一个对象的实现的基础上
  • 接口继承 ------ 描述了一个对象什么时候可以代替另一个对象使用
  • 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. }  
/**
* Interface IManeuverable provides the specification
* for a maneuverable vehicle.
*/
public interface IManeuverable {
	public void left();

	public void right();

	public void forward();

	public void reverse();

	public void climb();

	public void dive();

	public void setSpeed(double speed);

	public double getSpeed();
}

public class Car implements IManeuverable { 
	// Code here. 
}

public class Boat implements IManeuverable { 
	// Code here. 
}

public class Submarine implements IManeuverable { 
	// Code here. 
}

 

下面的方法只需要知道参数是机动车辆而不需要关心它到底属于哪个类(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. }  
public void travel(IManeuverable vehicle) {
	vehicle.setSpeed(35.0);
	vehicle.forward();
	vehicle.left();
	vehicle.climb();
}

 

 

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值