zoukankan      html  css  js  c++  java
  • 设计模式学习笔记(4)-接口和抽象类

    接口和抽象类的区别

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

    抽象类和接口的意义

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

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

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

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

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

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

    少用继承,多用组合

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

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

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

    金钱和自由相比,不值一提
  • 相关阅读:
    重大技术需求系统八
    2020年下半年软考真题及答案解析
    周总结五
    重大技术需求系统七
    TextWatcher 编辑框监听器
    Android四大基本组件介绍与生命周期
    JAVA String,StringBuffer与StringBuilder的区别??
    iOS开发:保持程序在后台长时间运行
    宏定义的布局约束
    随便说一些
  • 原文地址:https://www.cnblogs.com/roadzhao/p/12301896.html
Copyright © 2011-2022 走看看