回顾:日志记录器工厂
本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 66 课,共 70 课。
挑战
简单让我们使用工厂模式来构建一个日志系统!你将创建不同类型的日志记录器,它们共享一个通用接口,然后使用工厂函数,根据简单的字符串参数生成合适的日志记录器。
你将在四个文件中组织代码:
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() 接口,因此可以互换使用。
你将收到两个输入:
- 日志记录器类型(
"console"或"file") - 要记录的消息
例如,如果输入是 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 在线编译器