Menu
Coddy logo textTech

מבוא לתבניות עיצוב

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 64 מתוך 87.

תבניות עיצוב הן פתרונות מוכחים לבעיות נפוצות שמפתחים נתקלים בהן שוב ושוב בעת פיתוח תוכנה. במקום להמציא את הגלגל מחדש בכל פעם, אפשר ליישם את התבניות האלה, שנבחנו לאורך זמן, כדי לפתור אתגרי עיצוב חוזרים.

חשוב על דפוסי עיצוב כעל שרטוטים. הם לא מספקים לך קוד מוגמר שאפשר להעתיק ולהדביק, אלא מתארים כיצד לבנות את המחלקות והאובייקטים שלך כדי לפתור סוג מסוים של בעיה. הדפוסים שתלמד מנצלים את מושגי ה-OOP שכבר שלטת בהם: הורשה, ממשקים, פולימורפיזם והרכבה.

דפוסי עיצוב מתחלקים לשלוש קטגוריות עיקריות:

קטגוריהמטרהדוגמאות
יצירהכיצד יוצרים אובייקטיםSingleton, Factory, Builder
מבנהכיצד מרכיבים אובייקטיםAdapter, Decorator, Composite
התנהגותכיצד אובייקטים מתקשריםObserver, Strategy, Command

למה ללמוד תבניות עיצוב? הן מעניקות לך אוצר מילים משותף עם מפתחים אחרים: האמירה "השתמשו ב־Factory כאן" מעבירה מיד רעיון מורכב. הן גם עוזרות לך לכתוב קוד גמיש יותר וקל יותר לתחזוקה, באמצעות יישום עקרונות כמו "תכנתו לממשק, לא למימוש."

בשיעורים הבאים תממשו כמה תבניות חיוניות, החל בתבניות יצירה כמו Singleton ו־Factory, ואז תעברו לתבניות התנהגות כמו Observer ו־Strategy.

challenge icon

אתגר

קל

נבנה מסווג תבניות פשוט שידגים את ההבנה שלך בשלוש הקטגוריות של תבניות עיצוב! תיצור מערכת שמסווגת תבניות ומסבירה את מטרתן, תוך ארגון הקוד שלך בכמה קבצים.

תיצור שלושה קבצים:

  • Pattern.java: צור ממשק בשם Pattern שמגדיר את החוזה עבור כל תבניות העיצוב. על הממשק שלך להצהיר על שתי שיטות: String getCategory() שמחזירה את הקטגוריה של התבנית (Creational, Structural או Behavioral), ו-String getPurpose() שמחזירה תיאור של מה שעושה קטגוריית התבניות הזו.
  • PatternInfo.java: צור שלוש מחלקות שמממשות את הממשק Pattern שלך, שכל אחת מהן מייצגת קטגוריה אחת של תבניות עיצוב:

    CreationalPattern - צריכה להחזיר "Creational" עבור הקטגוריה ו-"How objects are created" עבור המטרה.

    StructuralPattern - צריכה להחזיר "Structural" עבור הקטגוריה ו-"How objects are composed" עבור המטרה.

    BehavioralPattern - צריכה להחזיר "Behavioral" עבור הקטגוריה ו-"How objects communicate" עבור המטרה.

  • Main.java: חבר את מסווג התבניות שלך! תקבל קלט אחד: שם של תבנית (String), שיהיה אחד מהבאים: "Singleton", "Factory", "Adapter", "Decorator", "Observer" או "Strategy".

    בהתאם לקלט, צור את אובייקט התבנית המתאים:

    • "Singleton" ו-"Factory" הן תבניות Creational
    • "Adapter" ו-"Decorator" הן תבניות Structural
    • "Observer" ו-"Strategy" הן תבניות Behavioral

    אחסן את אובייקט התבנית שלך במשתנה מסוג Pattern (הממשק), כדי להדגים את עקרון התכנות באמצעות ממשק. לאחר מכן, הדפס את שלוש השורות הבאות:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

תקבל קלט אחד: שם של תבנית עיצוב (String).

האתגר הזה מחזק את התובנה המרכזית מהשיעור: תבניות עיצוב מאורגנות בקטגוריות בהתאם לבעיה שהן פותרות. באמצעות ממשק, תתרגל גם את העיקרון של "תכנות לממשק, לא למימוש" — מושג מרכזי שהופך את תבניות העיצוב לחזקות כל כך!

נסו בעצמכם

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: הכריזו על משתנה מטיפוס Pattern (הממשק)
        Pattern pattern = null;
        
        // TODO: על סמך patternName, צרו את אובייקט התבנית המתאים:
        // - "Singleton" ו-"Factory" הן תבניות יצירה
        // - "Adapter" ו-"Decorator" הן תבניות מבניות
        // - "Observer" ו-"Strategy" הן תבניות התנהגותיות
        
        // TODO: הדפיסו את הפלט בפורמט הבא:
        // תבנית: [שם התבנית שהוזן]
        // קטגוריה: [הקטגוריה שמחזירה getCategory()]
        // מטרה: [המטרה שמחזירה getPurpose()]
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Java אונליין