مراجعة - مصنع الـ Logger
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 66 من 70.
التحدي
سهللنَبْنِ نظام logging باستخدام نمط Factory! ستُنشئ أنواعًا مختلفة من loggers تشترك في واجهة مشتركة، ثم تستخدم دالة factory لإنتاج logger المناسب استنادًا إلى وسيط نصي بسيط.
ستنظّم الشيفرة عبر أربعة ملفات:
ConsoleLogger.lua: أنشئConsoleLoggerclass باستخدام مُنشئ:new()و:log(message)method. عند استدعاء:log()، يجب أن يطبع الرسالة مسبوقة بـ[CONSOLE]، مثل[CONSOLE] Your message here.FileLogger.lua: أنشئFileLoggerclass بالبنية نفسها: مُنشئ:new()و:log(message)method. يجب أن يطبع هذاloggermessages مسبوقة بـ[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() نفسها، ولذلك يمكن استخدامهما بالتبادل.
ستتلقى مدخلين:
- نوع
Logger(إما"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() مع الرسالة
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت