2.1 תבניות יצירה תרגול
Factory¶
תרגיל 1 - מייצא דוחות¶
מערכת TaskFlow צריכה לייצא דוחות בפורמטים שונים: JSON, CSV, ו-TXT.
כתבו:
1. ממשק מופשט ReportExporter עם מתודה export(data: list) -> str
2. שלושה מימושים: JsonExporter, CsvExporter, TxtExporter
3. Factory function בשם create_exporter(format: str) -> ReportExporter
Builder¶
תרגיל 2 - בניית שאילתה¶
כתבו QueryBuilder שבונה שאילתות 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()
)
# צריך לייצר:
# "SELECT id, title, status FROM tasks WHERE owner_id=? AND status=? ORDER BY created_at DESC LIMIT 10"
# עם params: (5, "in_progress")
המתודה build() תחזיר tuple של (query_string, params_tuple).
Singleton¶
תרגיל 3 - Logger¶
כתבו AppLogger כ-Singleton שמדפיס הודעות עם timestamp ורמת חומרה.
logger = AppLogger()
logger.info("משתמש התחבר")
logger.warning("ניסיון כושל להתחברות")
logger.error("חיבור למסד הנתונים נכשל")
# פלט לדוגמה:
# [2026-04-03 10:30:15] INFO: משתמש התחבר
# [2026-04-03 10:30:16] WARNING: ניסיון כושל להתחברות
# [2026-04-03 10:30:17] ERROR: חיבור למסד הנתונים נכשל
ודאו שגם אם יוצרים שני instances שונים, הם אותו אובייקט.