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


    接口和抽象类的区别

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

    抽象类和接口的意义

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

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

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

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

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

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

    少用继承,多用组合

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

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

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

  • 相关阅读:
    SonarQube代码质量管理平台安装与配置
    特殊字符大全
    测试“用户登录”功能
    通用测试用例大全
    k8s dashboard 部署并使用 kubeconfig 登陆
    k8s cert-manager 部署
    nginx ingress部署
    Harbor 安装
    kubernetes 高可用集群1.14 部署
    shell 免密远程执行
  • 原文地址:https://www.cnblogs.com/parallelline/p/12301896.html
Copyright © 2020-2023  润新知