Khóa học java

Bridge Pattern trong Java

0 phút đọc

Bridge Pattern là một mẫu design pattern trong lập trình Java.

Bridge Pattern là gì

Bridge Pattern được sử dụng khi bạn muốn tách biệt sự phân cấp trong một thành phần giao diện (interface) và sự phân cấp trong việc thực hiện nó. Nó giúp bạn loại bỏ sự phụ thuộc giữa các lớp giao diện và các lớp cụ thể.

Bridge Pattern UML Diagram

Bridge Pattern UML Diagram

Dưới đây là sơ đồ UML của Bridge Pattern:

scss Copy
+---------------------+         +------------------+
|      Abstraction    |         |   Implementor   |
+---------------------+         +------------------+
| + operation()       |         | + implement()   |
|                     |         |                  |
|                     |         |                  |
|    +---------------+|         |    +-----------+ |
|    |               ||         |    |           | |
|    |               ||         |    |           | |
|    |               ||         |    |           | |
+----|------------   ||         +----|-----------| |
     |               ||              |           | |
     +---------------+|              +-----------+ |
                      |                            |
                      +----------------------------+
                           AbstractionRefined
  • Abstraction: Đây là một lớp trừu tượng chứa một đối tượng của Implementor và định nghĩa các phương thức giao diện (interface) mà các lớp con của nó phải triển khai. Abstraction cung cấp một cách tiếp cận thông qua các phương thức của nó để giao tiếp với Implementor.
  • Implementor: Đây là một giao diện (interface) hoặc lớp trừu tượng mà các lớp cụ thể triển khai. Nó định nghĩa các phương thức mà Abstraction sử dụng để thực hiện các hoạt động cụ thể.
  • AbstractionRefined: Đây là các lớp con của Abstraction và được sử dụng để triển khai các chi tiết cụ thể của phương thức được định nghĩa trong Abstraction.

Ví dụ về Bridge Pattern

Giả sử bạn cần xử lý việc ghi log của tin nhắn, và bạn muốn có khả năng lựa chọn giữa việc ghi log ra màn hình hoặc ghi log vào tệp tin, đồng thời bạn cũng muốn lựa chọn giữa việc log dưới dạng văn bản thô hoặc văn bản đã mã hóa.

Ví dụ về Bridge Pattern

Các Lớp

java Copy
public interface MessageLogger {
  public void log(String msg);
}

public class ConsoleLogger implements MessageLogger {
  @Override
  public void log(String msg) {
    System.out.println(msg);
  }
}

public class FileLogger implements MessageLogger {
  @Override
  public void log(String msg) {
    // Ghi tin nhắn ra file log.txt
    // ...
  }
}

public abstract class Message {
  MessageLogger messageLogger;

  public Message() {}

  public Message(MessageLogger messageLogger) {
    this.messageLogger = messageLogger;
  }

  public abstract void log(String msg);
}

public class TextMessage extends Message {
  public TextMessage() {}

  public TextMessage(MessageLogger messageLogger) {
    super(messageLogger);
  }

  @Override
  public void log(String msg) {
    this.messageLogger.log(msg);
  }
}

public class EncryptedMessage extends Message {
  public EncryptedMessage() {}

  public EncryptedMessage(MessageLogger messageLogger) {
    super(messageLogger);
  }

  @Override
  public void log(String msg) {
    // Mã hóa tin nhắn và sau đó ghi log
    // ...
  }
}

Sử dụng Bridge Pattern

java Copy
public class MainApp {
  public static void main(String[] args) {
    // Chọn log kiểu hiển thị ra màn hình
    MessageLogger messageLogger = new ConsoleLogger();

    // Chọn cách thức hiển thị kiểu mã hóa
    Message message1 = new EncryptedMessage(messageLogger);

    // Chọn cách thức hiển thị kiểu văn bản thô
    Message message2 = new TextMessage(messageLogger);

    // Thực thi phương thức log
    message1.log("stackjava.com");
    message2.log("stackjava.com");
  }
}

Bridge Pattern cho phép bạn tách biệt việc ghi log (loggers) và kiểu log (plaintext hoặc encrypted) một cách linh hoạt mà không phải thay đổi mã nguồn của các lớp tin nhắn (Messages) hay các lớp ghi log (Loggers).

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào