设计模式学习笔记(4)-接口和抽象类

接口和抽象类的区别

  • 抽象类不能被实例化,只能被继承
  • 抽象类可以包含属性和方法,方法既可以包括代码实现,也可以不包含代码实现(抽象方法)
  • 子类继承抽象类,必须实现抽象类的所有方法
  • 接口不能包含属性
  • 接口只能声明方法,不包括代码实现
  • 类实现接口,必须实现接口中所有的方法

抽象类和接口的意义

抽象类是对成员变量和方法的抽象,是一种is-a 关系,是为了解决代码复用问题,接口仅仅是方法的抽象,是一种has-a 关系,表示具有某种行为特性,是为了解决解耦问题,

如何决定使用抽象类还是接口

  • 解决代码复用,并且是 is-a 关系 使用抽象类
  • 解决抽象而非代码复用,且是has-a 关系,使用接口

基于接口(抽象)而非实现编程

越抽象,越脱离具体某一细节的设计,越能提高代码的灵活性,越能应对未来的需求变化

  1. 函数命名要具有抽象思维,不要暴露实现细节
  2. 封装具体的实现细节
  3. 为实现类定义抽象的接口,具体的实现类都依赖统一的接口定义,遵从一致的协议,调用者依赖接口而不是实现类
  4. 避免过度使用抽象,尊从设计初衷,接口实现分离,封装不稳定的实现,暴露稳定的接口,即给调用者使用的代码要稳定

少用继承,多用组合

  • 继承层次加深,导致代码可读性变差,因为要搞清楚某个类的属性方法,要不断的查看父类代码。另一方面破坏封装性,将父类的实现细节暴露给子类,造成两者高度耦合
  • 使用组合、接口、委托三个技术手段解决上诉问题

附上大牛课程,需要可以直接去学习

http://gk.link/a/10fWa

猜你喜欢

转载自www.cnblogs.com/roadzhao/p/12301896.html