面试题答案
一键面试场景一:数据库操作
- 应用方式:在大型系统中,可能需要与多种不同类型的数据库(如 MySQL、Oracle、SQL Server 等)进行交互。可以定义一个数据库操作的接口,如
DatabaseOperation
,包含connect()
、query()
、update()
等方法。然后针对每种数据库实现该接口,如MySQLDatabaseOperation
、OracleDatabaseOperation
等。 - 多态作用:系统中涉及数据库操作的模块只需调用
DatabaseOperation
接口的方法,而无需关心具体是哪种数据库。这样当需要更换数据库类型时,只需在创建对象时替换为对应的实现类,而不需要修改大量的业务代码,提高了系统的可维护性和可扩展性。
场景二:日志记录
- 应用方式:定义一个日志记录的抽象类
Logger
,包含log()
方法。然后有不同的实现类,如FileLogger
(将日志记录到文件)、ConsoleLogger
(将日志输出到控制台)、DatabaseLogger
(将日志记录到数据库)。 - 多态作用:在系统的各个模块中,只需调用
Logger
的log()
方法来记录日志。在系统配置或运行时,可以根据需求选择不同的日志记录实现类。例如,开发阶段可能使用ConsoleLogger
方便查看日志,生产环境可能使用FileLogger
持久化日志,实现了灵活的日志记录策略,降低了模块间的耦合度。
场景三:图形绘制
- 应用方式:定义一个图形的抽象类
Shape
,包含draw()
方法。然后有具体的图形类继承自Shape
,如Circle
(圆形)、Rectangle
(矩形)、Triangle
(三角形),各自实现draw()
方法。 - 多态作用:在图形绘制系统中,有一个绘制图形的模块。该模块可以接收一个
Shape
类型的对象列表,然后遍历列表调用每个对象的draw()
方法。这样,无论系统中新增何种图形,只要继承自Shape
并实现draw()
方法,就可以方便地加入到绘制流程中,增强了系统的扩展性,符合开闭原则。