1. 七大原则是哪七个?
① 单一职责原则
② 开闭原则
③ 里氏代换原则
④ 依赖倒转原则
⑤ 接口隔离原则
⑥ 组合复用原则
⑦ 迪米特法则
2. 面向对象设计的目标是什么(说两方面)?
- 可维护性
- 可复用性
3. 简述:你对单一职责原则的理解?并举一个不符合的例子,对其进行改造。
- 单一职责原则:一个对象应该
只包含单一职责
,并且该职责被完整地封装在一个类中。
- 例子:一个类有①连接数据库的功能 ②查询数据的功能 ③展示数据的功能;这个类就不符合
单一职责原则
,可能引起它改变的外因有①数据库类型改变了②查询方式改变了③展示数据的方式改变了。 - 改造:将上述三个功能,
分别封装到三个类
中,就符合单一职责原则。
4. 简述:你对开闭原则的理解?举一个例子
- 开闭原则:对扩展开发,对修改关闭
- 例子:一个数据库操作类,直接面向 MYSQL 连接的类实例编程;
- 改造:上述数据库操作类,如果需要更换成 Oracle 数据,就需要修改源代码,不符合开闭原则;应该面向抽象编程。
5. 简述:你对里氏代换原则的理解?并举例说明
- 里氏代换原则:在所有引用
基类
的地方必须能够透明地使用其子类对象
。
- 比如:
我喜欢动物
,代表我喜欢狗
;反过来,我说我喜欢狗
,不代表我喜欢所有动物
。
6. 简述:你对依赖倒转原则的理解?并举例
依赖倒转原则:高潮模块不应该依赖于低层模块,他们都应该依赖抽象。
抽象应该依赖于细节,细节应该依赖抽象。
里氏代换原则是基础,依赖倒转原则是手段,开闭原则是目标
例子:当我们需要连接数据库时,不应该对面 Mysql 连接类编程,而应该面对抽象数据库类编程
7. 简述:你对接口隔离原则的理解?不举例
- 接口隔离原则:
客户端不应该依赖那些不需要的接口。
8. 简述:你对合成复用原则的理解?理解分析中的每句话?并举例
合成复用原则:
优先使用对象组合,而不是继承来达到复用的目的。
例子:有一个用户列表管理类,它不应该去继承自 ArrayList,应该使用组合复用的方式,将 ArrayList 当成成员变量。
- 分析如下:每句话理解一下
9. 简述:你对迪米特法则的理解?并举例
- 迪米特法则:每一个软件单位对其他的单位都只有
最少知识
。换句话说:适当的引入中间类
,来降低原来系统的耦合度。
- 例子:中介者模式就是迪米特法则的最佳例子。