לדלג לתוכן

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 שונים, הם אותו אובייקט.