Design Pattern Decorator là gì?
Design Pattern Decorator là gì?
Thuộc nhóm structural design pattern cho phép người dùng thêm tính năng vào đối tượng đã tồn tại mà không phải chỉnh sửa cấu trúc của nó. Pattern này tạo một lớp gọi là decorator hành động như một wrapper, bọc đối tượng đã tồn tại bằng cách giữ nguyên đặc trưng của các phương thức lớp. Pattern này sử dụng lớp trừu tượng và itnerface với composition để triển khai wrapper. Chúng chủ yếu được sử dụng để áp dụng SRP (Nguyên tắc Trách nhiệm Đơn lẻ) khi ya phân chia các chức năng thành các lớp với các mối quan tâm duy nhất. Pattern này có cấu trúc tương tự như CoR ở trên. Các bước triển khai decorator:
Ta làm thử ví dụ để dễ hiểu. Ở đây ta tạo interface Shape
và các lớp cụ thể của nó Rectangle
và Triangle
để triển khai interface này. Ta sẽ tạo lớp trừu tượng là ShapeDecorator
để triển khai interface Shape
. Sau đó ta tạo RedColorDecorator
mở rộng từ ShapeDecorator
. Ta sẽ sử dụng decorator này cho các triển khai tính năng.
// Shape.java
public interface Shape {
void draw();
}
// Rectangle.java
public class Rectangle implements Shape {
// Overriding the draw method
@Override public void draw()
{
System.out.println("Rectangle Drawn...");
}
}
// Triangle.java
public class Triangle implements Shape {
// Overriding the draw method
@Override public void draw()
{
System.out.println("Triangle Drawn...");
}
}
// ShapeDecorator.java
public abstract class ShapeDecorator implements Shape {
protected Shape shapeDecorated;
public ShapeDecorator(Shape shapeDecorated)
{
this.shapeDecorated = shapeDecorated;
}
public void draw() {
shapeDecorated.draw();
}
}
// RedColorDecorator.java
public class RedColorDecorator extends ShapeDecorator {
public RedColorDecorator(Shape shapeDecorated)
{
super(shapeDecorated);
}
@Override
public void draw()
{
shapeDecorated.draw();
setRedBorder(shapeDecorated);
}
private void setRedBorder(Shape shapeDecorated)
{
System.out.println("Red color border added...");
}
}
// Driver.java
public class Driver {
// Main driver method
public static void main(String[] args)
{
Shape triangle = new Triangle();
Shape redTriangle
= new RedColorDecorator(new Triangle());
Shape redRectangle = new RedColorDecorator(new Rectangle());
// Draw normal triangle
triangle.draw();
System.out.println(".........");
// make the triangle red
redTriangle.draw();
System.out.println(".........");
// make the rectangle red
redRectangle.draw();
System.out.println(".........");
}
}
Xác minh kết quả ở output:
Triangle Drawn...
.........
Triangle Drawn...
Red color border added...
.........
Rectangle Drawn...
Red color border added...
.........
middle
Gợi ý câu hỏi phỏng vấn
Chưa có bình luận nào