Menu
Coddy logo textTech

まとめ - Logger Factory

CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 66/70。

challenge icon

チャレンジ

簡単

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を受け取ります。

  1. Logger type("console"または"file"のいずれか)
  2. logするmessage

たとえば、inputsがconsoleApplication startedの場合、outputは次のようになります。

[CONSOLE] Application started

inputsがfileSaving 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オンラインコンパイラ