Menu
CoddyTech

回顾:日志记录器工厂

本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 66 课,共 70 课。

challenge icon

挑战

简单

让我们使用工厂模式来构建一个日志系统!你将创建不同类型的日志记录器,它们共享一个通用接口,然后使用工厂函数,根据简单的字符串参数生成合适的日志记录器。

你将在四个文件中组织代码:

  • ConsoleLogger.lua:创建一个 ConsoleLogger 类,包含一个 :new() 构造函数和一个 :log(message) 方法。调用 :log() 时,它应在消息前加上 [CONSOLE] 前缀并打印,例如 [CONSOLE] Your message here。
  • FileLogger.lua:创建一个 FileLogger 类,结构相同,包含一个 :new() 构造函数和一个 :log(message) 方法。这个日志记录器应在消息前加上 [FILE] 前缀并打印。
  • LoggerFactory.lua:工厂模式将在这里发挥作用!创建一个接受字符串参数的 createLogger(loggerType) 函数。如果类型是 "console",就返回一个新的 ConsoleLogger。如果类型是 "file",就返回一个新的 FileLogger。工厂会处理实例化哪个类的所有细节。
  • main.lua:引入你的 LoggerFactory 模块。读取两个输入:日志记录器类型和要记录的消息。使用工厂创建合适的日志记录器,然后调用它的 :log() 方法并传入这条消息。

这种设计的优点在于,主代码只需要与工厂交互。它不需要直接了解 ConsoleLogger 或 FileLogger。两个日志记录器都实现了相同的 :log() 接口,因此可以互换使用。

你将收到两个输入:

  1. 日志记录器类型("console" 或 "file")
  2. 要记录的消息

例如,如果输入是 console 和 Application started,输出应为:

[CONSOLE] Application started

如果输入是 file 和 Saving user data...,输出应为:

[FILE] Saving user data...

亲手试试

-- main.lua
-- 日志系统的主入口

local LoggerFactory = require('LoggerFactory')

-- 读取输入
local loggerType = io.read()
local message = io.read()

-- TODO:使用 LoggerFactory 创建合适的日志记录器
-- 然后将 message 传给 :log() 方法并调用它

面向对象编程中的所有课

自己练习: Lua 在线编译器