JavaRush /Java Blogu /Random-AZ /Nümunələr ilə dekorativ dizayn nümunəsi
Sbv239
Səviyyə
Санкт-Петербург

Nümunələr ilə dekorativ dizayn nümunəsi

Qrupda dərc edilmişdir
Dekorator dizayn nümunəsi eyni sinif obyektlərinin davranışına təsir etmədən obyektə dinamik olaraq funksionallıq əlavə etməyə imkan verir. Bir az çaşqın səslənir, amma kodu görəndə hər şey aydınlaşacaq. Xüsusiyyətlər - Dekorator mövcud obyektin strukturunu dəyişmədən ona funksionallıq əlavə etməyə imkan verir, yəni orijinal sinif dəyişmir - Dekorator dizayn nümunəsi mövcud sinif üçün sarğı təmin edən struktur nümunəsidir - Dekorator sinifləri yaradılır ki, orijinal sinfi sarın və orijinal sinfin metod imzalarını qoruyaraq əlavə funksionallıq təmin edin - Dekorator dizayn nümunəsi ən çox SOLID-dən vahid məsuliyyət prinsipinə əməl etmək üçün istifadə olunur, çünki biz orijinal sinfi əlavə məsuliyyətlərlə yükləmirik, lakin onları bölürük. dekorator siniflərinə - Dekorator strukturca demək olar ki, məsuliyyət zəncirinə bənzəyir (məsuliyyət zənciri) Aşağıdakı əsas məqamlar nəzərə alınmalıdır - Dekorator iş zamanı obyektin davranışını dəyişdirə bilmək üçün faydalıdır. Bu kodu saxlamaq və genişləndirmək asandır. - Bu modelin mənfi cəhəti odur ki, eyni tipli çoxlu sayda dekorativ obyektlərdən istifadə olunur - Dekorator nümunəsi Java IO siniflərində tez-tez istifadə olunur (FileReader, BufferedReader və s.) Biz nə edəcəyik - İnterfeys yaradın - Konkret yaradın bu interfeysin tətbiqləri - Bu interfeysi həyata keçirərək abstrakt dekorator yaradın - Abstrakt dekoratordan miras qalan konkret dekorator yaradaq - İnterfeysin konkret tətbiqlərini "bəzəmək" üçün konkret dekoratordan istifadə edin İcra : Biz Shape interfeysi və konkret siniflər yaradacağıq bu interfeysi həyata keçirən. Sonra, Shape interfeysini həyata keçirən və sinif sahəsi kimi Shape obyektinə malik olan abstrakt dekorator sinfi ShapeDecorator yaradacağıq. Nümunələr ilə dekorativ dizayn nümunəsi - 1 - Shape interfeysin adıdır - Rectangle, Triangle və Circle sinifləri Shape interfeysini həyata keçirən konkret siniflər olacaq - ShapeDecorator eyni Shape interfeysini həyata keçirən mücərrəd dekorator sinfidir - RedShapeDecorator ShapeDecorator tətbiq edən konkret sinifdir - Demo Forma obyektlərini bəzəmək üçün RedShapeDecorator istifadə edəcəyimiz demo sinfi Addım 1 : Shape interfeysini yaradın
public interface Shape {
    void draw();
}
Addım 2 : Gəlin bu interfeysin bir neçə tətbiqini yaradaq. Aşağıdakı nümunədə yalnız bir dairə olacaq, amma əslində bir neçə daha yaradacağıq: düzbucaqlı və üçbucaq.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Addım 3 : Shape interfeysini tətbiq edən abstrakt dekorator yaradın
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

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

    public void draw() {
        decoratedShape.draw();
    }
}
Addım 4 : abstrakt sinifdən miras qalan konkret dekorator sinfi yaradın
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. Цвет границы: красный");
    }
}
Addım 5 : Obyektlərimizi rəngləmək üçün RedShapeDecorator istifadə edin
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();
    }
}
Addım 6 : konsola baxın və sevin
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Nümunə olaraq dekorator dizayn nümunəsini araşdıraraq belə nəticəyə gələ bilərik ki, onun istifadəsi aşağıdakı hallarda əsaslandırılır: - Biz obyektin davranışını və ya vəziyyətini əlavə etmək, təkmilləşdirmək və ya bəlkə də aradan qaldırmaq istədikdə - Sadəcə funksionallığı dəyişdirmək istədikdə. bir sinfin müəyyən bir obyekti və qalanını heç bir dəyişiklik buraxın Təşəkkür edirik! Layihə faylları ilə anbar geeksforgeeks.org saytından məqalə əsasında Java Devi üçün yeni başlayanlar üçün bloqum
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION