2.1 - תבניות יצירה - תרגול
Factory¶
תרגיל 1 - מייצא דוחות¶
מערכת TaskFlow צריכה לייצא דוחות בפורמטים שונים: JSON, CSV, ו-TXT.
כתבו:
1. הinterface מופשט ReportExporter עם מתודה export(data: list) -> str
2. שלושה מימושים: JsonExporter, CsvExporter, TxtExporter
3. Factory function בשם create_exporter(format: str) -> ReportExporter
Builder¶
תרגיל 2 - בניית query¶
כתבו QueryBuilder שבונה queries SQL לטבלת tasks:
query = (
QueryBuilder("tasks")
.select("id", "title", "status")
.where("owner_id", 5)
.where("status", "in_progress")
.order_by("created_at", descending=True)
.limit(10)
.build()
)
# should produce:
# "SELECT id, title, status FROM tasks WHERE owner_id=? AND status=? ORDER BY created_at DESC LIMIT 10"
# with params: (5, "in_progress")
המתודה build() תחזיר tuple של (query_string, params_tuple).
Singleton¶
תרגיל 3 - Logger¶
כתבו AppLogger כ-Singleton שמדפיס הודעות עם timestamp ורמת חומרה.
logger = AppLogger()
logger.info("User logged in")
logger.warning("Failed login attempt")
logger.error("Database connection failed")
# Example output:
# [2026-04-03 10:30:15] INFO: User logged in
# [2026-04-03 10:30:16] WARNING: Failed login attempt
# [2026-04-03 10:30:17] ERROR: Database connection failed
ודאו שגם אם יוצרים שני instances שונים, הם אותו אובייקט.