[Design Patterns] Bridge Pattern

Bridge được sử dụng khi chúng ta cần tách một abstract khỏi class thực thể và khiến cho cả 2 đều trở nên linh động. Bridge được xếp vào nhóm các pattern Kiến Trúc. Bridge sử dụng một giao diện đóng vai trò như một cầu nối giúp cho các chức năng của class thực

Bridge được sử dụng khi chúng ta cần tách một abstract khỏi class thực thể
và khiến cho cả 2 đều trở nên linh động. Bridge được xếp vào nhóm các pattern Kiến Trúc.

Bridge sử dụng một giao diện đóng vai trò như một cầu nối giúp cho các chức năng
của class thực thể trở nên độc lập và tách riêng khỏi các class tạo giao diện.
Lúc này, cả 2 loại class đều có thể được chỉnh sửa linh động mà không ảnh hưởng lẫn nhau.

Áp dụng triển khai

sơ đồ các class

Ở đây chúng ta có một phần mềm vẽ các hình phẳng 2D có màu sắc khác nhau.
Thông thường để đơn giản thì chúng ta chỉ cần có 01 class baseCircle
và tạo ra các object hình tròn có thuộc tính màu sắc khác nhau để vẽ. Lúc này,
giao diện được sử dụng để vẽ là phương thức draw() của class Circle.

Tuy nhiên lúc này vấn đề nảy sinh là nếu như chúng ta muốn thay đổi cách hoạt động của draw(),
thì việc chỉnh sửa sẽ phải thực hiện trực tiếp trên class Circle. Hoặc ví dụ như chúng ta có ý định
chỉnh sửa class Circle thì cũng phải coi chừng cái thuộc tính màu sắc kẻo ảnh hưởng đến draw().

Để tách rời giao diện draw()Circle, một bridge được tạo ra bởi interface Drawing.
Các class triển khai DrawingRedDrawingGreen sẽ được Circle ủy thác hoàn toàn tác vụ draw() chi tiết.
Như vậy, giờ đây chúng ta có thể yên tâm thực hiện những điều chỉnh cần thiết trên Circle
mà không gây ảnh hưởng đến giao diện draw() đang hoạt động và ngược lại.

Bước 1

Tạo interface bridge.

bridgepattern/drawingapi/Drawing.java

packagebridgepattern.drawingapi;publicinterfaceDrawing{publicvoiddraw(int x,int y,int radius);}

Bước 2

Tạo các class triển khai Drawing.

bridgepattern/drawingapi/DrawingGreen.java

packagebridgepattern.drawingapi;publicclassDrawingGreenimplementsDrawing{@Overridepublicvoid draw (int radius,int x,int y){System.out.println("=== Đang vẽ hình tròn..");System.out.println("Màu sắc: Xanh lá");System.out.println("Tọa độ tâm: ("+ x +", "+ y +")");System.out.println("Bán kính: "+ radius);}}

bridgepattern/drawingapi/DrawingRed.java

packagebridgepattern.drawingapi;publicclassDrawingRedimplementsDrawing{@Overridepublicvoiddraw(int x,int y,int radius){System.out.println("=== Đang vẽ hình tròn..");System.out.println("Màu sắc: Đỏ");System.out.println("Tọa độ tâm: ("+ x +", "+ y +")");System.out.println("Bán kính: "+ radius);}}

Bước 3

Tạo abstract Shape sử dụng giao diện Drawing.

bridgepattern/Shape.java

packagebridgepattern;importbridgepattern.drawingapi.Drawing;abstractpublicclassShape{protectedDrawing drawingAPI;protectedShape(Drawing api){
      drawingAPI = api;}publicabstractvoiddraw();}

Bước 4

Tạo class Circle mở rộng Shape.

bridgepattern/Circle.java

packagebridgepattern;importbridgepattern.drawingapi.Drawing;publicclassCircleextendsShape{privateint x, y, radius;publicCircle(int x,int y,int radius,Drawing api){super(api);this.x = x;this.y = y;this.radius = radius;}@Overridepublicvoiddraw(){
      drawingAPI.draw(x, y, radius);}}

Bước 5

Sử dụng Shape và các class Drawing để vẽ các hình tròn với màu sắc khác nhau.

PatternDemo.java

importbridgepattern.Circle;importbridgepattern.drawingapi.DrawingGreen;importbridgepattern.drawingapi.DrawingRed;importbridgepattern.Shape;publicclassPatternDemo{publicstaticvoidmain(String[] args){Shape circleRed =newCircle(100,100,10,newDrawingRed());
      circleRed.draw();Shape circleGreen =newCircle(100,100,10,newDrawingGreen());
      circleGreen.draw();}}

Bước 6

Kiểm chứng lại kết quả in ra ở console.

console

=== Đang vẽ hình tròn..Màu sắc: Đỏ
Tọa độ tâm:(100,100)Bán kính:10=== Đang vẽ hình tròn..Màu sắc:XanhTọa độ tâm:(100,10)Bán kính:100

Nguồn: viblo.asia

Bài viết liên quan

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=