面试题答案
一键面试场景一:文件系统操作
- 场景描述:在一个文件系统管理项目中,文件系统包含各种类型的节点,如文件、文件夹。需要对这些不同类型的节点执行不同的操作,例如计算文件夹大小、统计文件数量等。
- 运用方式:
- 定义一个抽象的
FileSystemElement
类(或接口),它是文件和文件夹的基类,包含一个接受访问者的方法accept(Visitor visitor)
。 - 创建具体的
File
和Folder
类,继承自FileSystemElement
,实现accept
方法,在accept
方法中调用访问者的对应访问方法。 - 定义一个抽象的
Visitor
接口,包含针对不同类型文件系统元素的访问方法,如visit(File file)
和visit(Folder folder)
。 - 创建具体的访问者类,实现
Visitor
接口,在具体的访问方法中实现计算文件夹大小、统计文件数量等具体逻辑。在使用时,通过文件系统元素调用accept
方法,并传入具体访问者实例。
- 定义一个抽象的
场景二:报表生成
- 场景描述:在企业财务系统中,有不同类型的财务数据对象,如收入记录、支出记录等。需要根据这些数据生成不同类型的报表,如利润报表、现金流报表等。
- 运用方式:
- 定义抽象的
FinancialData
类(或接口),包含accept(Visitor visitor)
方法,作为收入记录、支出记录等类的基类。 - 创建具体的
IncomeRecord
和ExpenseRecord
类,继承自FinancialData
,实现accept
方法。 - 定义抽象的
ReportVisitor
接口,包含visit(IncomeRecord incomeRecord)
和visit(ExpenseRecord expenseRecord)
等方法。 - 创建具体的报表生成访问者类,如
ProfitReportVisitor
和CashFlowReportVisitor
,实现ReportVisitor
接口,在访问方法中收集和处理数据以生成相应报表。通过财务数据对象调用accept
方法,并传入具体报表生成访问者实例来生成报表。
- 定义抽象的