Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مصنع الـ Logger

جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 66 من 70.

challenge icon

التحدي

سهل

لنَبْنِ نظام logging باستخدام نمط Factory! ستُنشئ أنواعًا مختلفة من loggers تشترك في واجهة مشتركة، ثم تستخدم دالة factory لإنتاج logger المناسب استنادًا إلى وسيط نصي بسيط.

ستنظّم الشيفرة عبر أربعة ملفات:

  • ConsoleLogger.lua: أنشئ ConsoleLogger class باستخدام مُنشئ :new() و:log(message) method. عند استدعاء :log()، يجب أن يطبع الرسالة مسبوقة بـ [CONSOLE]، مثل [CONSOLE] Your message here.
  • FileLogger.lua: أنشئ FileLogger class بالبنية نفسها: مُنشئ :new() و:log(message) method. يجب أن يطبع هذا logger messages مسبوقة بـ [FILE] بدلًا من ذلك.
  • LoggerFactory.lua: هنا يلتقي نمط Factory! أنشئ دالة createLogger(loggerType) تقبل وسيطًا نصيًا. إذا كان النوع هو "console"، فأعد ConsoleLogger جديدًا. وإذا كان النوع هو "file"، فأعد FileLogger جديدًا. يتولى factory جميع تفاصيل تحديد أي class يجب إنشاء نسخة منه.
  • main.lua: نفّذ require لوحدة LoggerFactory. اقرأ مدخلين: نوع logger وmessage لتسجيلها. استخدم factory لإنشاء logger المناسب، ثم استدعِ :log() method الخاص به مع message.

تكمن أناقة هذا التصميم في أن شيفرتك الرئيسية تتفاعل فقط مع factory. فهي لا تحتاج إلى معرفة ConsoleLogger أو FileLogger مباشرةً. يطبّق كلا loggers واجهة :log() نفسها، ولذلك يمكن استخدامهما بالتبادل.

ستتلقى مدخلين:

  1. نوع Logger (إما "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 لإنشاء المسجّل المناسب
-- ثم استدعِ الطريقة :log() مع الرسالة

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Lua عبر الإنترنت