まとめ - Logger Factory
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 66/70。
チャレンジ
簡単Factoryパターンを使用してロギングシステムを構築しましょう!共通のインターフェースを共有する異なるタイプのロガーを作成し、シンプルな文字列引数に基づいて適切なロガーを生成するファクトリ関数を使用します。
コードは4つのファイルに分けて構成します:
ConsoleLogger.lua::new()コンストラクタと:log(message)メソッドを持つConsoleLoggerクラスを作成します。:log()が呼び出されたとき、メッセージの前に[CONSOLE]というプレフィックスを付けて、[CONSOLE] Your message hereのように出力する必要があります。FileLogger.lua: 同じ構造(:new()コンストラクタと:log(message)メソッド)を持つFileLoggerクラスを作成します。このロガーは、代わりに[FILE]というプレフィックスを付けてメッセージを出力する必要があります。LoggerFactory.lua: ここでFactoryパターンをまとめます!文字列の引数を受け取るcreateLogger(loggerType)関数を作成します。タイプが"console"の場合は新しいConsoleLoggerを返し、タイプが"file"の場合は新しいFileLoggerを返します。ファクトリは、どのクラスをインスタンス化するかという詳細をすべて処理します。main.lua: LoggerFactoryモジュールをロード(require)します。ロガーのタイプとログに記録するメッセージの2つの入力を読み取ります。ファクトリを使用して適切なロガーを作成し、そのメッセージで:log()メソッドを呼び出します。
この設計の優れている点は、メインコードがファクトリとだけやり取りし、ConsoleLoggerやFileLoggerについて直接知る必要がないことです。どちらのロガーも同じ:log()インターフェースを実装しているため、互換性を持って使用できます。
2つの入力を受け取ります:
- ロガーのタイプ(
"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を使用して適切なロガーを作成する
-- 次に、メッセージを指定して :log() メソッドを呼び出す