设计模式 Day02 面向对象设计的七大原则

1. 七大原则是哪七个?

① 单一职责原则
② 开闭原则
③ 里氏代换原则
④ 依赖倒转原则
⑤ 接口隔离原则
⑥ 组合复用原则
⑦ 迪米特法则

image.png
2. 面向对象设计的目标是什么(说两方面)?
  • 可维护性
  • 可复用性
image.png
3. 简述:你对单一职责原则的理解?并举一个不符合的例子,对其进行改造。
  • 单一职责原则:一个对象应该只包含单一职责,并且该职责被完整地封装在一个类中。
  • 例子:一个类有①连接数据库的功能 ②查询数据的功能 ③展示数据的功能;这个类就不符合单一职责原则,可能引起它改变的外因有①数据库类型改变了②查询方式改变了③展示数据的方式改变了。
  • 改造:将上述三个功能,分别封装到三个类中,就符合单一职责原则。
image.png
image.png
4. 简述:你对开闭原则的理解?举一个例子
  • 开闭原则:对扩展开发,对修改关闭
  • 例子:一个数据库操作类,直接面向 MYSQL 连接的类实例编程;
  • 改造:上述数据库操作类,如果需要更换成 Oracle 数据,就需要修改源代码,不符合开闭原则;应该面向抽象编程。
image.png
image.png
5. 简述:你对里氏代换原则的理解?并举例说明
  • 里氏代换原则:在所有引用基类的地方必须能够透明地使用其子类对象
  • 比如:我喜欢动物,代表我喜欢狗;反过来,我说我喜欢狗,不代表我喜欢所有动物
image.png
6. 简述:你对依赖倒转原则的理解?并举例
  • 依赖倒转原则:高潮模块不应该依赖于低层模块,他们都应该依赖抽象。抽象应该依赖于细节,细节应该依赖抽象。

  • 里氏代换原则是基础,依赖倒转原则是手段,开闭原则是目标

  • 例子:当我们需要连接数据库时,不应该对面 Mysql 连接类编程,而应该面对抽象数据库类编程

image.png
image.png
7. 简述:你对接口隔离原则的理解?不举例
  • 接口隔离原则:客户端不应该依赖那些不需要的接口。
image.png
image.png
8. 简述:你对合成复用原则的理解?理解分析中的每句话?并举例
  • 合成复用原则:优先使用对象组合,而不是继承来达到复用的目的。

  • 例子:有一个用户列表管理类,它不应该去继承自 ArrayList,应该使用组合复用的方式,将 ArrayList 当成成员变量。

image.png
  • 分析如下:每句话理解一下
image.png
9. 简述:你对迪米特法则的理解?并举例
  • 迪米特法则:每一个软件单位对其他的单位都只有最少知识。换句话说:适当的引入中间类,来降低原来系统的耦合度。
  • 例子:中介者模式就是迪米特法则的最佳例子。
image.png
image.png

你可能感兴趣的:(设计模式 Day02 面向对象设计的七大原则)