JavaRush /مدونة جافا /Random-AR /نمط تصميم الديكور مع الأمثلة
Sbv239
مستوى
Санкт-Петербург

نمط تصميم الديكور مع الأمثلة

نشرت في المجموعة
يسمح لنا نمط تصميم الديكور بإضافة وظائف إلى كائن ديناميكيًا دون التأثير على سلوك الكائنات من نفس الفئة. قد يبدو الأمر مربكًا بعض الشيء، ولكن بمجرد رؤية الرمز، سيصبح كل شيء أكثر وضوحًا. الميزات - يسمح لك مصمم الديكور بإضافة وظائف إلى كائن موجود دون تغيير بنيته، أي أن الفئة الأصلية لا تتغير - نمط تصميم الديكور هو نمط هيكلي يوفر غلافًا لفئة موجودة - يتم إنشاء فئات الديكور لف الفئة الأصلية وتوفير وظائف إضافية مع الحفاظ على توقيعات الطريقة الخاصة بالفئة الأصلية سليمة - غالبًا ما يستخدم نمط تصميم الديكور لاتباع مبدأ المسؤولية الفردية من SOLID، نظرًا لأننا لا نحمل الفئة الأصلية بمسؤوليات إضافية، بل نقسمها إلى فئات الديكور - يتشابه مصمم الديكور تقريبًا من الناحية الهيكلية مع نمط سلسلة المسؤولية (سلسلة المسؤولية). يجب أن تؤخذ النقاط الرئيسية التالية بعين الاعتبار - مصمم الديكور مفيد لأنه قادر على تعديل سلوك كائن أثناء وقت التشغيل. هذا الرمز سهل الصيانة والتوسيع. - عيب هذا النمط هو أنه يتم استخدام عدد كبير من كائنات الديكور من نفس النوع - غالبًا ما يستخدم نمط الديكور في فئات Java IO (FileReader، BufferedReader، إلخ) ماذا سنفعل - إنشاء واجهة - إنشاء الخرسانة تطبيقات هذه الواجهة - أنشئ ديكورًا مجردًا، ينفذ هذه الواجهة - لنقم بإنشاء ديكور ملموس يرث من مصمم ديكور مجرد - استخدم ديكورًا ملموسًا "لتزيين" التطبيقات الملموسة للواجهة التنفيذ : سنقوم بإنشاء واجهة الشكل والفئات الخرسانية التي تنفذ هذه الواجهة. بعد ذلك، سنقوم بإنشاء فئة ديكور مجردة، ShapeDecorator، التي تنفذ واجهة الشكل وتحتوي على كائن الشكل كحقل فئة. نمط التصميم الديكوري مع الأمثلة - 1 - الشكل هو اسم الواجهة - ستكون فئات المستطيل والمثلث والدائرة عبارة عن فئات ملموسة تنفذ واجهة الشكل - ShapeDecorator هي فئة ديكور مجردة تنفذ نفس واجهة الشكل - RedShapeDecorator هي فئة ملموسة تنفذ ShapeDecorator - Demo هو فئة تجريبية سنستخدم فيها RedShapeDecorator لتزيين كائنات الشكل. الخطوة 1 : إنشاء واجهة الشكل
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 Dev
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION