Ôn tập: Factory Logger
Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 66 trên 70.
Thử thách
DễHãy xây dựng một hệ thống ghi nhật ký bằng mẫu Factory! Bạn sẽ tạo các kiểu bộ ghi nhật ký khác nhau dùng chung một giao diện, sau đó dùng hàm factory để tạo bộ ghi nhật ký phù hợp dựa trên một đối số chuỗi đơn giản.
Bạn sẽ sắp xếp code trong bốn tệp:
ConsoleLogger.lua: Tạo lớp ConsoleLogger với hàm khởi tạo:new()và phương thức:log(message). Khi gọi:log(), phương thức này sẽ in thông điệp với tiền tố[CONSOLE], chẳng hạn như[CONSOLE] Your message here.FileLogger.lua: Tạo lớp FileLogger có cấu trúc tương tự: hàm khởi tạo:new()và phương thức:log(message). Thay vào đó, bộ ghi nhật ký này sẽ in thông điệp với tiền tố[FILE].LoggerFactory.lua: Đây là nơi mẫu Factory kết hợp mọi thứ! Tạo hàmcreateLogger(loggerType)nhận một đối số chuỗi. Nếu kiểu là"console", hãy trả về một ConsoleLogger mới. Nếu kiểu là"file", hãy trả về một FileLogger mới. Factory xử lý mọi chi tiết về việc khởi tạo lớp nào.main.lua: Nạp module LoggerFactory. Đọc hai đầu vào: kiểu bộ ghi nhật ký và thông điệp cần ghi. Dùng factory để tạo bộ ghi nhật ký phù hợp, sau đó gọi phương thức:log()của nó với thông điệp đó.
Điểm tinh tế của thiết kế này là code chính chỉ tương tác với factory. Nó không cần biết trực tiếp về ConsoleLogger hay FileLogger. Cả hai bộ ghi nhật ký đều triển khai cùng một giao diện :log(), nên bạn có thể dùng chúng thay thế cho nhau.
Bạn sẽ nhận hai đầu vào:
- Kiểu bộ ghi nhật ký (là
"console"hoặc"file") - Thông điệp cần ghi
Ví dụ, nếu đầu vào là console và Application started, đầu ra sẽ là:
[CONSOLE] Application startedNếu đầu vào là file và Saving user data..., đầu ra sẽ là:
[FILE] Saving user data...Tự làm thử
-- main.lua
-- Điểm bắt đầu chính của hệ thống ghi nhật ký
local LoggerFactory = require('LoggerFactory')
-- Đọc dữ liệu đầu vào
local loggerType = io.read()
local message = io.read()
-- TODO: Dùng LoggerFactory để tạo logger phù hợp
-- Sau đó gọi phương thức :log() với thông điệp
Tất cả bài học trong Lập trình hướng đối tượng
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch Lua online