まとめ - Logger Factory
CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 66/70。
チャレンジ
簡単Factoryパターンを使ってloggingシステムを構築しましょう!共通のインターフェースを共有するさまざまな種類のloggerを作成し、単純な文字列引数に基づいて適切なloggerを生成するfactory functionを使用します。
コードを4つのファイルに整理します。
ConsoleLogger.lua::new()constructorと:log(message)methodを持つConsoleLogger classをCreateします。:log()がcallされたとき、[CONSOLE]prefix付きでmessageをprintします。例:[CONSOLE] Your message here。FileLogger.lua: 同じ構造のFileLogger classをCreateします。:new()constructorと:log(message)methodを持ちます。このloggerは代わりに[FILE]prefix付きでmessagesをprintします。LoggerFactory.lua: ここでFactoryパターンがまとまります!文字列引数を受け取るcreateLogger(loggerType)functionをCreateします。typeが"console"の場合は新しいConsoleLoggerを返します。typeが"file"の場合は新しいFileLoggerを返します。factoryが、どのclassをinstantiateするかに関するすべての詳細を処理します。main.lua: LoggerFactory moduleをRequireします。2つのinputs、つまりlogger typeとlogするmessageをReadします。factoryを使用してappropriate loggerをCreateし、その:log()methodをmessageとともにcallします。
この設計の洗練された点は、main codeがfactoryとのみやり取りすることです。ConsoleLoggerやFileLoggerについて直接知る必要はありません。両方のloggersが同じ:log()インターフェースをImplementしているため、互換的に使用できます。
2つのinputsを受け取ります。
- Logger type(
"console"または"file"のいずれか) - logするmessage
たとえば、inputsがconsoleとApplication startedの場合、outputは次のようになります。
[CONSOLE] Application startedinputsがfileとSaving user data...の場合、outputは次のようになります。
[FILE] Saving user data...自分で試してみよう
-- main.lua
-- ロギングシステムのメインエントリーポイント
local LoggerFactory = require('LoggerFactory')
-- 入力を読み取る
local loggerType = io.read()
local message = io.read()
-- TODO: LoggerFactoryを使用して適切なロガーを作成する
-- 次にメッセージを指定して:log()メソッドを呼び出す
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ