Design Patterns: Bridge

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Thuộc nhóm: Structural

Tần suất sử dụng: Trung bình

Vấn đề đặt ra

Khi một lớp trừu tượng (abstraction) có thể có một vài thành phần bổ sung thêm thì cách thông thường phù hợp với chúng là sử dụng kế thừa. Một lớp trừu tượng định nghĩa một giao diện cho trừu tượng đó, và các lớp con cụ thể thực hiện nó theo các cách khác nhau. Nhưng cách tiếp cận này không đủ mềm dẻo. Sự kế thừa ràng buộc một thành phần bổ sung thêm là cố định cho abstraction, điều này làm nó khó thay đổi, mở rộng, và sử dụng lại các abstraction, các thành phần bổ sung một cách độc lập.Trong trường hợp này dùng một mẫu Bridge là thích hợp nhất.

Mẫu Bridge thường được ứng dụng khi:

  • Ta muốn tránh một ràng buộc cố định giữa một abstraction và một thành phần bổ sung thêm của nó.
  • Cả hai, các abstraction và các thành phần cài đặt của chúng nên có khả năng mở rộng bằng việc phân chia lớp. Trong trường hợp này, Bridge pattern cho phép ta kết hợp các abstraction và các thành phần bổ sung thêm khác nhau và mở rộng chúng một cách độc lập.
  • Thay đổi trong thành phần được bổ sung thêm của một abstraction mà không ảnh hưởng đối với các client, tức là mã của chúng không nên đem biên dịch lại.
  • Ta muốn làm ẩn đi hoàn toàn các thành phần bổ sung thêm của một abstraction khỏi các client.
  • Ta có một sự phát triển rất nhanh các lớp, hệ thống phân cấp lớp chỉ ra là cần phải tách một đối tượng thành hai phần.
  • Ta muốn thành phần bổ sung thêm có mặt trong nhiều đối tượng, và việc này lại được che khỏi client (client không thấy được).

Định nghĩa

Bridge là mẫu thiết kế dùng để tách riêng một lớp trừu tượng khỏi thành phần cài đặt của nó để có được hai cái có thể biến đổi độc lập.

Sơ đồ UML

Bridge

Abstraction (BusinessObject)

  • Định nghĩa một giao diện trừu tượng
  • Duy trì một tham chiếu tới đối tượng của các lớp kế thừa từ nó

RefinedAbstraction (CustomersBusinessObject)

  • Mở rộng giao diện bằng cách định nghĩa một đối tượng trừu tượng

Implementor (DataObject)

  • Định nghĩa giao diện cho lớp kế thừa.Giao diện này không phải tương ứng chính xác với giao diện trừu tượng. Trong thực tế 2 giao diện này có thể khá là độc lập. Việc kế thừa một cách tuỳ ý các giao diện cũng chỉ cung cấp duy nhất các thao tác nguyên thuỷ và lớp trừu tượng định nghĩa một thao tác mức trên dựa những thao tác nguyên thuỷ này.

ConcreteImplementor (CustomersDataObject)

  • Cài đặt giao diện đã được cài đặt và định nghĩa một cài đặt cụ thể.

Các mẫu liên quan

Abstract Factory cũng có thể tạo ra và cấu hình một Bridge. Adapter có thể được cơ cấu theo hướng để 2 lớp không có quan hệ gì với nhau có thể làm việc với nhau được. Nó thường ứng dụng cho các hệ thống sau khi đã được thiết kế. Bridge xét ở một khía cạnh khác nó kết thúc một thiết kế để lớp trừu tượng và lớp cài đặt có thể tuỳ biến một cách độc lập.

» Tiếp: Composite
« Trước: Adapter
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!