JavaRush /בלוג Java /Random-HE /דפוס עיצוב דקורטור עם דוגמאות
Sbv239
רָמָה
Санкт-Петербург

דפוס עיצוב דקורטור עם דוגמאות

פורסם בקבוצה
תבנית עיצוב הדקורטור מאפשרת לנו להוסיף באופן דינמי פונקציונליות לאובייקט מבלי להשפיע על התנהגותם של אובייקטים מאותה מחלקה. זה נשמע קצת מבלבל, אבל ברגע שתראה את הקוד הכל יתבהר. מאפיינים - דקורטור מאפשר להוסיף פונקציונליות לאובייקט קיים מבלי לשנות את המבנה שלו, כלומר המחלקה המקורית אינה משתנה - דפוס עיצוב הדקורטור הוא דפוס מבני המספק עטיפה לכיתה קיימת - נוצרות כיתות דקורטורים עוטפים את המחלקה המקורית ומספקים פונקציונליות נוספת תוך שמירה על חתימות השיטה של ​​המחלקה המקורית ללא פגע - תבנית עיצוב הדקורטור משמשת לרוב כדי לפעול לפי עיקרון האחריות היחידה מ-SOLID, מכיוון שאנו לא מעמיסים על המחלקה המקורית אחריות נוספת, אלא מחלקים אותן לתוך כיתות מעצבים - המעצב דומה מבחינה מבנית כמעט לדפוס שרשרת האחריות (שרשרת האחריות) יש לקחת בחשבון את נקודות המפתח הבאות - דקורטור שימושי ליכולת לשנות את ההתנהגות של אובייקט בזמן ריצה. קוד זה קל לתחזוקה והרחבה. - החיסרון של דפוס זה הוא שמשתמשים במספר רב של חפצי דקורטור מאותו סוג - לרוב משתמשים בדפוס הדקורטור במחלקות Java IO (FileReader, BufferedReader וכו') מה נעשה - יצירת ממשק - יצירת בטון הטמעות של ממשק זה - יצירת דקורטור מופשט, הטמעת ממשק זה - בואו ניצור מעצב בטון שיורש מדקורטור מופשט - השתמש במקשט בטון כדי "לקשט" יישומים קונקרטיים של הממשק יישום: ניצור את ממשק ה- Shape ושיעורי בטון שמיישמים את הממשק הזה. לאחר מכן, ניצור מחלקת עיצוב מופשטת, ShapeDecorator, המיישמת את ממשק ה-Shape ויש לה אובייקט Shape כשדות מחלקה. דפוס עיצוב מעצב עם דוגמאות - 1 - Shape הוא שם הממשק - מחלקות המלבן, המשולש והמעגל יהיו מחלקות בטון המיישמות את ממשק ה-ShapeDecorator - ShapeDecorator היא מחלקת עיצוב מופשטת המיישמת את אותו ממשק Shape - RedShapeDecorator היא מחלקת בטון המיישמת את ShapeDecorator - הדגמה היא כיתת הדגמה שבה נשתמש ב-RedShapeDecorator כדי לקשט אובייקטי Shape שלב 1 : צור את ממשק Shape
public interface Shape {
    void draw();
}
שלב 2 : בואו ניצור מספר יישומים של ממשק זה. בדוגמה למטה יהיה רק ​​עיגול, אבל למעשה ניצור עוד זוג: מלבן ומשולש.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
שלב 3 : צור דקורטור מופשט המיישם את ממשק הצורה
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

    //Конструктор, принимающий an object Shape
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }

    public void draw() {
        decoratedShape.draw();
    }
}
שלב 4 : צור כיתת מעצבי בטון שיורשת מהכיתה המופשטת
public class RedShapeDecorator extends ShapeDecorator{

    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }

    @Override
    public void draw() {
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }

    private void setRedBorder(Shape decoratedShape) {
        System.out.println("Сообщение от RedShapeDecorator. Цвет границы: красный");
    }
}
שלב 5 : השתמש ב-RedShapeDecorator כדי לצבוע את האובייקטים שלנו
public class Demo {
    public static void main(String[] args)
    {
        Shape circle = new Circle();
        Shape redCircle= new RedShapeDecorator(new Circle());
        Shape redRectangle= new RedShapeDecorator(new Rectangle());
        Shape redTriangle = new RedShapeDecorator(new Triangle());

        System.out.println("\nОбычный круг:");
        circle.draw();

        System.out.println("\nКруг с красной границей:");
        redCircle.draw();

        System.out.println("\nПрямоугольник с красной границей:");
        redRectangle.draw();

        System.out.println("\nТреугольник с красной границей:");
        redTriangle.draw();
    }
}
שלב 6 : הסתכל על הקונסולה ושמח
Обычный круг:
Я круг!

Круг с красной границей:
Я круг!
Сообщение от RedShapeDecorator. Цвет границы: красный

Прямоугольник с красной границей:
Я прямоугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
לאחר בחינת דפוס עיצוב הדקורטור כדוגמה, אנו יכולים להסיק שהשימוש בו מוצדק במקרים הבאים: - כאשר אנו רוצים להוסיף, לשפר או אולי להסיר את ההתנהגות או המצב של אובייקט - כאשר אנו פשוט רוצים לשנות את הפונקציונליות של אובייקט אחד ספציפי של כיתה ולהשאיר את השאר ללא שינוי תודה! מאגר עם קבצי פרויקטים מבוסס על מאמר מהאתר geeksforgeeks.org הבלוג שלי למפתח Java מתחיל
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION