JavaRush /Blog Java /Random-VI /Mẫu thiết kế trang trí với các ví dụ
Sbv239
Mức độ
Санкт-Петербург

Mẫu thiết kế trang trí với các ví dụ

Xuất bản trong nhóm
Mẫu thiết kế trang trí cho phép chúng ta tự động thêm chức năng vào một đối tượng mà không ảnh hưởng đến hành vi của các đối tượng cùng lớp. Nghe có vẻ hơi khó hiểu nhưng một khi bạn nhìn thấy mã thì mọi thứ sẽ trở nên rõ ràng hơn. Tính năng - Trình trang trí cho phép bạn thêm chức năng vào một đối tượng hiện có mà không thay đổi cấu trúc của nó, nghĩa là lớp ban đầu không thay đổi - Mẫu thiết kế trang trí là một mẫu cấu trúc cung cấp một lớp bao bọc cho một lớp hiện có - Các lớp trang trí được tạo ra bao bọc lớp gốc và cung cấp chức năng bổ sung trong khi vẫn giữ nguyên các chữ ký phương thức của lớp gốc - Mẫu thiết kế trang trí thường được sử dụng để tuân theo nguyên tắc trách nhiệm duy nhất từ ​​SOLID, vì chúng tôi không tải lớp gốc với các trách nhiệm bổ sung mà phân chia chúng vào các lớp trang trí - Trình trang trí có cấu trúc gần giống với chuỗi mẫu trách nhiệm (chuỗi trách nhiệm) Các điểm chính sau đây phải được tính đến - Trình trang trí rất hữu ích để có thể sửa đổi hành vi của một đối tượng trong thời gian chạy. Mã này rất dễ bảo trì và mở rộng. - Nhược điểm của mẫu này là sử dụng một số lượng lớn các đối tượng trang trí cùng loại - Mẫu trang trí thường được sử dụng trong các lớp Java IO (FileReader, BufferedReader, v.v.) Chúng ta sẽ làm gì - Tạo giao diện - Tạo cụ thể triển khai giao diện này - Tạo một trình trang trí trừu tượng, triển khai giao diện này - Hãy tạo một trình trang trí cụ thể kế thừa từ một trình trang trí trừu tượng - Sử dụng một trình trang trí cụ thể để "trang trí" các triển khai cụ thể của giao diện Thực hiện: Chúng ta sẽ tạo giao diện Shape và các lớp cụ thể thực hiện giao diện này. Tiếp theo, chúng ta sẽ tạo một lớp trang trí trừu tượng, ShapeDecorator, lớp này triển khai giao diện Shape và có đối tượng Shape làm trường lớp. Mẫu thiết kế trang trí kèm ví dụ - 1 - Shape là tên của giao diện - Các lớp Rectangle, Triangle và Circle sẽ là các lớp cụ thể thực hiện giao diện Shape - ShapeDecorator là lớp trang trí trừu tượng thực hiện cùng một giao diện Shape - RedShapeDecorator là lớp cụ thể thực hiện ShapeDecorator - Demo là một lớp demo trong đó chúng ta sẽ sử dụng RedShapeDecorator để trang trí các đối tượng Shape Bước 1 : tạo giao diện Shape
public interface Shape {
    void draw();
}
Bước 2 : Hãy tạo một số triển khai của giao diện này. Trong ví dụ bên dưới sẽ chỉ có một hình tròn, nhưng trên thực tế, chúng ta sẽ tạo thêm một vài hình nữa: hình chữ nhật và hình tam giác.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Bước 3 : Tạo một trình trang trí trừu tượng triển khai giao diện 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();
    }
}
Bước 4 : tạo một lớp trang trí cụ thể kế thừa từ lớp trừu tượng
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. Цвет границы: красный");
    }
}
Bước 5 : Sử dụng RedShapeDecorator để tô màu các đối tượng của chúng ta
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();
    }
}
Bước 6 : nhìn vào bảng điều khiển và vui mừng
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Sau khi xem xét mẫu thiết kế trang trí làm ví dụ, chúng ta có thể kết luận rằng việc sử dụng nó là hợp lý trong các trường hợp sau: - Khi chúng ta muốn thêm, cải thiện hoặc có thể loại bỏ hành vi hoặc trạng thái của một đối tượng - Khi chúng ta chỉ muốn thay đổi chức năng của một đối tượng cụ thể của một lớp và không thay đổi phần còn lại. Cảm ơn bạn! Kho lưu trữ với các tệp dự án Dựa trên một bài viết từ trang geeksforgeeks.org Blog của tôi dành cho người mới bắt đầu Java Dev
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION