王争《设计模式之美》学习笔记
书本概念
封装
- 封装也叫作信息隐藏或者数据访问保护。
- 类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。
- 对于封装这个特性,我们需要编程语言本身提供一定的语法机制来支
持。这个语法机制就是访问权限控制。 - 类仅仅通过有限的方法暴露必要的操作,也能提高类的易用性。
抽象
- 在面向对象编程中,我们常借助编程语言提供的接口类(比如 Java 中的 interface 关键字语法)或者抽象类(比如 Java 中的 abstract 关键字语法)这两种语法机制,来实现抽象这一特性。
继承
- 继承是用来表示类之间的 is-a 关系,比如猫是一种哺乳动物。
- 继承最大的一个好处就是代码复用。
多态
- 多态是指,子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。
- 对于多态特性的实现方式,除了利用“继承加方法重写”这种实现方式之外,我们还有其他两种比较常见的的实现方式,一个是利用接口类语法,另一.个是利用 duck-typing 语法。
个人理解
- 第一轮理解,在许多年以前,仅停留在书本和概念表面。
- 读完本节课,大致总结落到编码实处:封装就是说类,抽象就是说接口,继承就是说父类子类,多态就是说子类中方法的重写。 那么封装对应抽象,就是类对应接口。类有继承,子类可以继承可以重写。
- 再引申思考,觉得课程中有一种思想特别给我新的领悟,抽象是一种设计思想,不是简单地指接口类,类中函数设计也是一种抽象的思想,那么这么说下来,封装也不能说只是访问保护,也是抽象函数设计和代码重用。
- 再白话点说,接口也就是接口类,和类一样,都是源自封装的方法和抽象的思想。那么类的继承和接口类的实现是同样的方案。接口的实现其实每个都是相当于重写,因为接口类和类的区别就是,接口类中只定义方法名没有具体内容。
举例
- 一个后台项目,增删改查主要功能,六个功能项,六个列表页、详情页、新增页和修改页。
- 可以封装一个基础类,里面有查询字段、修改字段、显示字段等属性,增加和修改、条件查询列表、id查询详情三个方法。
- 六个功能项,每个类继承这个基础类,只要赋值自己对应的属性,就可直接复用基础类中的三个方法。子类中不需要写任何代码就能实现列表页、详情页、新增页和修改页。
- 六个功能项,有某个功能项中的某一方法和基础类中不同,可以在子类中重写此方法,即是多态。