1、抽象类是解决代码复用的,接口类则是解决抽象而不是代码复用:抽象类是一种自下而上的设计思路,先有子类的重复,再抽象成父类。而接口正好相反,是先定义接口(类似一个协议),是自上而下的。

抽象类和接口的语法特点:抽象类不能被实例化,能被继承,它可以包含属性和方法,方法可以包含实现,没有实现的方法称为抽象方法,继承抽象类的类要实现它的所有抽象方法。而接口类则只能包含抽象方法,不能有属性和方法实现,实现接口的类必须实现接口所有抽象方法。


原则:基于接口而非实现编程也叫基于抽象而非实现编程
越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。
原则核心:接口的定义只表明做什么,而不是怎么做。

这条原则的设计初衷是,将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低代码间的耦合性,提高代码的扩展性。

《设计模式之美》之接口、抽象类笔记相关推荐

  1. 本人亲自整理的极客时间设计模式之美的硬核笔记

    由于笔记内容过多,我把它放到语雀上了. 点击我 以下内容是为了让搜索引擎,检测到这篇文章.要阅读体验,请点击上面的连接"点击我",去我的语雀看.对了,我看到语雀那里有投诉的功能,请 ...

  2. 极客时间-设计模式之美 王争 听课笔记

    文章目录 极客时间-设计模式之美 王争 01 每个程序员都要尽早学习并掌握设计模式相关知识 02 哪些维度评判代码质量? 03 面向对象.设计原则.设计模式.编程规范.重构,这五者有何关系? 04 当 ...

  3. 代码技巧--设计模式之美

    设计模式之美 零.文章目录 一.概述 1.学习导读 本文是极客时间专栏<设计模式之美>的学习笔记,详情请看原文. 学习算法 :是为了写出 高效 的代码: 学习设计模式 :是为了写出 高质量 ...

  4. 本人亲自整理的极客时间设计模式之美下部的硬核笔记(残缺版)最近加班太多,搞不了太多,只能尽量了xd们

    设计模式之美(下)https://www.yuque.com/zcming123/uygxde/cbwnad 这位猿,三连,再走吧! 以下内容是为了让搜索引擎,检测到这篇文章.要阅读体验,请点击上面的 ...

  5. 设计模式之美 精华总结 笔记(二)

    文章目录 设计模式之美 精华总结 笔记(二) 一.面向对象精解 1.封装 2.抽象 3.继承 4.多态 5.思考:为什么有些语言不允许多继承 二.面向对象优于面向过程的地方 1.形式上 2.复用.扩展 ...

  6. 设计模式之美笔记11

    记录学习王争的设计模式之美 课程 笔记和练习代码,以便回顾复习,共同进步 文章目录 门面模式 门面模式的原理和实现 门面模式的应用场景举例 1. 解决易用性问题 2. 解决性能问题 3. 解决分布式事 ...

  7. 《设计模式之美》笔记---行为型设计模式

    文章目录 观察者模式 模板模式 模板模式与回调 策略模式 定义 创建 使用 如何避免掉冗长的if-else|switch分支判断代码? 职责链模式 定义 实现 第一种 第二种(其实就是使用数组实现而已 ...

  8. 设计模式之美读书笔记

    目录 设计模式之美 读书笔记5- 哪些代码看似面向对象,实际是面向过程编程? 读书笔记4- 封装.抽象.继承.多态分别解决了什么编程问题? 读书笔记3- 我们在讨论面向对象的时候,主要说的是什么? 读 ...

  9. JavaSE面向对象:继承、多态、Super、Object类、重写、static、final、静态成员、懒汉式、饿汉式、单例设计模式、初始化块、抽象类、抽象方法、接口

    感谢尚硅谷免费提供的视频 继承 ** 理解 ** 生活中的继承:子女继承了父母的财产或相貌或才华 java中的继承:一个类不用自己定义属性或方法,就已经具备了另一个类的属性和方法 把这种现象称为jav ...

  10. 设计模式之美:Facade(外观)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):用抽象类定义 Facade 而使子类对应于不同的子系统. 意图 为子系统中的一组接口提供一个一致的界面,Facade 模式定义了 ...

最新文章

  1. java 文件压缩 解压_Java文件压缩与解压缩(一)
  2. 近世代数--整环上的唯一分解问题--唯一分解整环上有算术分解定理
  3. 七十二、Vuex实现双父组件数据共享、localStorage、mapActions和keep-alive
  4. JAVA——JUNIT运行错误[No tests were found]
  5. 基于SSM的学生宿舍管理系统
  6. OpenGL超级宝典第7版 配置环境第一个程序
  7. python怎么编辑浏览器_怎样修改anaconda默认浏览器
  8. 相邻染色问题java_浅析一类要求相邻不同的环上染色问题
  9. JS生成随机字符,生成一堆高逼格的乱码。。。
  10. win10查看端口号
  11. 高中信息技术项目化教学开题报告
  12. 网络营销几种简单的反复(下)
  13. 用英语提交软件测试bug,软件测试——关于提交bug随笔
  14. 嵌入式开发:嵌入式应用程序中的信任链简介
  15. dp的sst模式下training流程
  16. 服务器H330阵列卡不建议做Raid5
  17. Discuz!教程之论坛编辑器默认勾选HTML代码的修改方法
  18. K1 K2 傻瓜刷机、自动刷入Breed 华硕Padavan 辅助工具 (v2.1)
  19. 基于单片机的智能手环系统设计
  20. TIA博途软件安装在虚拟机中,如何连接PLC进行通信?

热门文章

  1. Python2/3共存,pip2/3共存
  2. day1 java基础回顾- 文件路径
  3. java线程中yield(),sleep(),wait()区别详解
  4. Visual Studio 单元测试之六---UI界面测试
  5. [SQL Server] Access和SQL Server的数据迁移
  6. matlab中的tall,tall 数组 - MATLAB Simulink - MathWorks 中国
  7. IPv6各地址计算方式汇总
  8. 关于C# winform开发时datagridview图片显示异常的处理
  9. CentOS下redis安装和部署
  10. io_service线程安全队列效率