JavaRush /Blog Java /Random-PL /Wzór projektowy dekoratora z przykładami
Sbv239
Poziom 23
Санкт-Петербург

Wzór projektowy dekoratora z przykładami

Opublikowano w grupie Random-PL
Wzorzec projektowy dekoratora pozwala nam dynamicznie dodawać funkcjonalność do obiektu bez wpływu na zachowanie obiektów tej samej klasy. Brzmi to trochę zagmatwanie, ale kiedy zobaczysz kod, wszystko stanie się jaśniejsze. Funkcje - Dekorator umożliwia dodanie funkcjonalności do istniejącego obiektu bez zmiany jego struktury, co oznacza, że ​​oryginalna klasa się nie zmienia - Wzorzec projektowy dekoratora to wzorzec strukturalny, który zapewnia opakowanie dla istniejącej klasy - Tworzone są klasy dekoratorów, które zawiń oryginalną klasę i zapewnij dodatkową funkcjonalność, zachowując nienaruszone sygnatury metod oryginalnej klasy - Wzorzec projektowy dekoratora jest najczęściej używany w celu przestrzegania zasady pojedynczej odpowiedzialności z SOLID, ponieważ nie ładujemy oryginalnej klasy dodatkowymi obowiązkami, ale je dzielimy na klasy dekoratorów - Dekorator jest strukturalnie prawie podobny do wzorca łańcucha odpowiedzialności (łańcuch odpowiedzialności). Należy wziąć pod uwagę następujące kluczowe punkty - Dekorator jest przydatny, ponieważ umożliwia modyfikowanie zachowania obiektu w czasie wykonywania. Kod ten jest łatwy w utrzymaniu i rozbudowie. - Wadą tego wzorca jest to, że używana jest duża liczba obiektów dekoratorów tego samego typu - Wzorzec dekoratora jest często używany w klasach IO Java (FileReader, BufferedReader itp.) Co zrobimy - Utworzymy interfejs - Utworzymy konkretny implementacje tego interfejsu - Stwórz abstrakcyjny dekorator, implementując ten interfejs - Stwórzmy konkretny dekorator, który dziedziczy po abstrakcyjnym dekoratorze - Użyj konkretnego dekoratora do "dekorowania" konkretnych implementacji interfejsu Implementacja : Stworzymy interfejs Shape i konkretne klasy które implementują ten interfejs. Następnie utworzymy klasę dekoratora abstrakcyjnego ShapeDecorator, która implementuje interfejs Shape i ma obiekt Shape jako pole klasy. Wzór projektowy dekoratora z przykładami - 1 - Shape to nazwa interfejsu - Klasy Rectangle, Triangle i Circle będą konkretnymi klasami implementującymi interfejs Shape - ShapeDecorator to abstrakcyjna klasa dekoratora, która implementuje ten sam interfejs Shape - RedShapeDecorator to konkretna klasa, która implementuje ShapeDecorator - Demo to klasa demonstracyjna, w której użyjemy RedShapeDecorator do ozdabiania obiektów Shape. Krok 1 : utwórz interfejs Shape
public interface Shape {
    void draw();
}
Krok 2 : Stwórzmy kilka implementacji tego interfejsu. W poniższym przykładzie będzie tylko okrąg, ale tak naprawdę utworzymy jeszcze kilka: prostokąt i trójkąt.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Krok 3 : Utwórz abstrakcyjny dekorator implementujący interfejs Shape
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

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

    public void draw() {
        decoratedShape.draw();
    }
}
Krok 4 : utwórz konkretną klasę dekoratora, która dziedziczy po klasie abstrakcyjnej
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. Цвет границы: красный");
    }
}
Krok 5 : Użyj RedShapeDecorator do pokolorowania naszych obiektów
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();
    }
}
Krok 6 : spójrz na konsolę i raduj się
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Rozpatrując na przykładzie wzorca projektowego dekoratora, możemy stwierdzić, że jego zastosowanie jest uzasadnione w następujących przypadkach: - gdy chcemy dodać, poprawić lub ewentualnie usunąć zachowanie lub stan obiektu - gdy chcemy po prostu zmienić funkcjonalność jednego konkretnego obiektu klasy, a resztę pozostaw bez zmian. Dziękuję! Repozytorium z plikami projektów Na podstawie artykułu z serwisu geeksforgeeks.org Mój blog dla początkującego Java Deva
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION