Blog

设计模式之美学习笔记17: 里氏替换原则(LSP)与多态的区别

2019-12-11
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第17节的学习笔记,介绍面向对象设计原则中的里氏替换原则。

笔记 #

面向对象有很多经典的设计原则:

  • SOLID5原则分别是
    • 单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖反转原则(DIP)
  • KISS - Keep It Simple, Stupid
  • YAGNI - You aren’t gonna need it
  • DRY - Don’t Repeat Yourself
  • LOD - Law of Demeter(迪米特法则,又叫做最少知识原则)

里氏替换原则 #

里氏替换原则: 子类对象能够替换程序中的父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。 从定义描述和代码实现上来看,多态和里氏替换原则有点类似,但它们关注的角度是不一样的。多态是面向对象一大特性,是一种语法,是一种代码实现的思路。 里氏替换是一种设计原则,用来指导继承关系中子类如何设计,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。

...

设计模式之美学习笔记16: 设计原则之开闭原则(OCP)

2019-12-09
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第16节的学习笔记,介绍面向对象设计原则中的开闭原则。

笔记 #

面向对象有很多经典的设计原则:

  • SOLID5原则分别是
    • 单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖反转原则(DIP)
  • KISS - Keep It Simple, Stupid
  • YAGNI - You aren’t gonna need it
  • DRY - Don’t Repeat Yourself
  • LOD - Law of Demeter(迪米特法则,又叫做最少知识原则)

开闭原则 #

开闭原则(Open Closed Principle): 即软件实体(模块、类、方法等)对扩展开发,对修改关闭。 通俗的理解即添加一个新的功能应该是在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。 在GOF 23种经典设计模式中,大部分设计模式是为了解决代码的扩展性问题而存在的,主要遵从的设计原则就是开闭原则。

...

设计模式之美学习笔记15: 设计原则之单一职责原则(SRP)

2019-12-06
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第15节的学习笔记,介绍面向对象设计原则中的单一职责原则。

笔记 #

面向对象有很多经典的设计原则:

  • SOLID5原则分别是
    • 单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖反转原则(DIP)
  • KISS - Keep It Simple, Stupid
  • YAGNI - You aren’t gonna need it
  • DRY - Don’t Repeat Yourself
  • LOD - Law of Demeter(迪米特法则,又叫做最少知识原则)

单一职责原则(SRP) #

一个类或模块只负责完成一个职责(或功能)。单一职责原则是为了实现代码的高内聚、低耦合,提高代码的复用性、可读性、可维护性。 单一职责原则的定义中包含模块,对于模块可以从不同的范围理解:

...

设计模式之美学习笔记11~12: 贫血模型 vs. 充血模型

2019-11-29
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第11, 12节的学习笔记,是专栏中介绍"面向对象"这一设计原则和设计思想的两节。

笔记 #

这两节分上、下两节主要介绍了在Java Web开发中盛行的传统的贫血模型开发模式,是典型的面向过程的编程风格;而基于充血模型的DDD开发模式,是面向对象的编程风格。 然后作者结合一个虚拟钱包系统的例子给出了两种开发模式的示例代码,只是示例代码略微简单,作者介绍的设计思路在示例代码中体现不大。

...

设计模式之美学习笔记10: 组合优于继承

2019-11-25
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第9节的学习笔记,第10节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。

笔记 #

组合优于继承,多用组合少用继承是面向对象编程中非常经典的一条设计原则。

继承虽然是面向对象的四大特性之一,使用继承可以解决代码复用的问题,但也有其缺点: 继承层次过深、过于复杂会影响到代码的可维护性

...

设计模式之美学习笔记09: 基于接口编程

2019-11-22
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第9节的学习笔记,第9节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。

笔记 #

基于接口编程(Interface-based programing)是一个设计原则,理解这条原则里的接口两字,接口是一组协议约定。 接口这个词在不同场景下有不同的含义,比如后端服务提供给前端服务的"接口"、类库提供的"接口"、而一组自定义的私有通信协议也可以被称作"接口",而具体编程语言中的接口一般指的是这种编程语言中的"接口或抽象类"的语法特性。我们再来看一下维基百科中“基于接口编程”的定义: 基于接口编程也称基于接口的架构,它是一种在没有模块系统的面向对象程序设计语言中的组件层面实现模块化编程的架构模式。

...

设计模式之美学习笔记08: 如何使用普通类模拟抽象类和接口

2019-11-20
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第8节的学习笔记,第8节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。

笔记 #

很多面向对象的语言都提供"抽象类"和"接口"这两个语法特性。抽象类和接口是实现面向对象四大特性、很多设计模式、设计思想、设计原则的基础。 但并不是所有编程语言都支持者两个语法特性,我们可以通过一些手段来模拟这它们。

...

设计模式之美学习笔记06: 面向对象对比面向过程的优势

2019-11-15
Design Patterns

今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第6节的学习笔记,第6节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。

常见的编程范式 #

本节主要对比了面向对象与面向过程的优势,是偏理论性的一节。提到了大家比较熟知的三种编程范式: 过程式面向对象函数式。 因为函数式编程和GOF设计模式的套路关系不大,所以作者王争老师也说了在专栏中不会涉及函数式编程。 另外在编程语言中还有一种面向消息的编程方式,本节没有提及。

...

© 2024 青蛙小白