לדלג לתוכן

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