JavaRush /وبلاگ جاوا /Random-FA /الگوی طراحی دکوراتور با نمونه
Sbv239
مرحله
Санкт-Петербург

الگوی طراحی دکوراتور با نمونه

در گروه منتشر شد
الگوی طراحی دکوراتور به ما این امکان را می دهد که به صورت پویا عملکردی را به یک شی اضافه کنیم بدون اینکه بر رفتار اشیاء هم کلاس تأثیر بگذاریم. کمی گیج کننده به نظر می رسد، اما با دیدن کد همه چیز واضح تر می شود. ویژگی ها - یک دکوراتور به شما امکان می دهد بدون تغییر ساختار آن، عملکردی را به یک شی موجود اضافه کنید، یعنی کلاس اصلی تغییر نمی کند - الگوی طراحی دکوراتور یک الگوی ساختاری است که یک پوشش برای یک کلاس موجود فراهم می کند - کلاس های Decorator ایجاد می شوند که کلاس اصلی را بپیچید و عملکرد اضافی را ارائه دهید و در عین حال امضاهای روش کلاس اصلی را دست نخورده نگه دارید - الگوی طراحی دکوراتور اغلب برای پیروی از اصل مسئولیت واحد از SOLID استفاده می شود، زیرا ما کلاس اصلی را با مسئولیت های اضافی بارگذاری نمی کنیم، بلکه آنها را تقسیم می کنیم. در کلاس‌های دکوراتور - دکوراتور از نظر ساختاری تقریباً شبیه الگوی زنجیره مسئولیت است (زنجیره مسئولیت) . نگهداری و گسترش این کد آسان است. - عیب این الگو این است که تعداد زیادی از اشیاء دکوراتور از یک نوع استفاده می شود - الگوی دکوراتور اغلب در کلاس های Java IO استفاده می شود (FileReader، BufferedReader و غیره) آنچه انجام خواهیم داد - ایجاد یک رابط - ایجاد بتن پیاده سازی این رابط - ایجاد یک دکوراتور انتزاعی، پیاده سازی این رابط - بیایید یک دکوراتور بتنی ایجاد کنیم که از یک دکوراتور انتزاعی به ارث می رسد - استفاده از دکوراتور بتن برای "تزیین" پیاده سازی های بتنی رابط پیاده سازی: ما رابط Shape و کلاس های بتن را ایجاد خواهیم کرد. که این رابط را پیاده سازی می کنند. در مرحله بعد، یک کلاس دکوراتور انتزاعی به نام ShapeDecorator ایجاد می کنیم که رابط Shape را پیاده سازی می کند و یک شی Shape به عنوان فیلد کلاس دارد. الگوی طراحی دکوراتور با نمونه - 1 - Shape نام رابط است - کلاس های Rectangle، Triangle و Circle کلاس های بتنی هستند که رابط Shape را پیاده سازی می کنند - ShapeDecorator یک کلاس تزئین کننده انتزاعی است که همان رابط Shape را پیاده سازی می کند - RedShapeDecorator یک کلاس بتنی است که ShapeDecorator را پیاده سازی می کند - Demo is یک کلاس دمو که در آن از RedShapeDecorator برای تزئین اشیاء Shape استفاده می کنیم. مرحله 1 : ایجاد رابط Shape
public interface Shape {
    void draw();
}
مرحله 2 : بیایید چندین پیاده سازی از این رابط ایجاد کنیم. در مثال زیر فقط یک دایره وجود خواهد داشت، اما در واقع یک زوج دیگر ایجاد خواهیم کرد: یک مستطیل و یک مثلث.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
مرحله 3 : یک دکوراتور انتزاعی ایجاد کنید که رابط Shape را پیاده سازی کند
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