Vai trò
Mẫu Bridge tách riêng một sự trừu tượng từ việc thực thi của nó, cho phép chúng thay đổi một cách độc lập. Mẫu Bridge rất hữu ích khi một phiên bản mới của phần mềm được đưa ra sẽ thay thế phiên bản hiện tại, nhưng các phiên bản cũ vẫn phải chạy trên client hiện tại của chúng. Mã của client sẽ không phải thay đổi, vì nó được phù hợp với một sự trừu tượng nhất định, nhưng client sẽ cần phải chỉ ra phiên bản nó muốn sử dụng.
Minh hoạ
Xem xét việc ra một phiên bản mới của .NET Framework sử dụng để biên dịch và chạy C# 3.0. Bạn có thể có một vài phiên bản của Framework tải vào máy tính của bạn bất cứ lúc nào và có thể chọn cái nào để sử dụng bằng cách thiết lập một đường dẫn bên ngoài đến nó trong hệ điều hành Windows. Thiết lập các đường dẫn là cầu nối giữa những ứng dụng muốn sử dụng Framework và phiên bản thực tế chúng sẽ nhận được. Trong hình 2-6, bạn có thể thấy rằng có năm phiên bản của Framework được tải vào máy tính của tôi. Hình 2-7 cho thấy một trong những hệ thống đang được hướng đến là phiên bản 3.5, trong đó bao gồm trình biên dịch C# 3.0.
Thiết kế
Kế thừa là một cách thông thường để chỉ định thực thi khác nhau của một sự trừu tượng. Tuy nhiên, việc thực thi này sau đó bị ràng buộc chặt chẽ với các khái niệm trừu tượng, và rất khó để thay đổi chúng một cách độc lập. Mẫu Bridge cung cấp một sự thay thế cho kế thừa khi có nhiều hơn một phiên bản của sự trừu tượng. Xem xét các sơ đồ UML trong hình 2-8. Hai sự thực thi, A và B, thực thi một giao diện được gọi là Bridge. Abstraction bao gồm một thuộc tính của kiểu Bridge nhưng không phải là khác trong mối quan hệ với việc triển khai.
Hình 2-7. Minh họa mẫu Bridge (b)—biến môi trường Path thiết lập cho phiên bản 3.5
Hình 2-8. Sơ đồ UML mẫu Bridge
Abstraction
Giao diện mà client sử dụng Operation
Một phương thức được gọi bởi client Bridge
Một giao diện xác định các phần của Abstraction mà có thể khác nhau
ImplementationA và ImplementationB Sự thực thi của giao diện Bridge
OperationImp
Một phương thức trong Bridge được gọi từ Operation của Abstraction
Như chúng tôi lưu ý với mẫu Decorator, có thể có một số triển khai cho một abstraction. Triển khai mang tính kế thừa không phải thực hiện các Bridge nếu chúng vẫn sẽ được khởi tạo theo cách cũ; Chúng cần phải làm như vậy chỉ khi chúng phải được sử dụng thay thế cho nhau với việc triển khai mới.
Thực hiện
Một lần nữa, chúng ta hãy bắt đầu với một ví dụ lý thuyết nhỏ, như trong ví dụ 2-5. Trong client, mỗi thể hiện của Abstraction được đưa ra thực thi khác nhau (dòng 39-40). Sau đó, các Operation được gọi. Mỗi lời gọi đi đến một phương thức OperationImp khác nhau (dòng 24 và 31), và kết quả đầu ra được hiển thị bên dưới (dòng 45-46). Chú ý rằng những triển khai thực hiện Bridge, nhưng Abstraction tổng hợp nó.