Bridge pattern là gì

     

1. Giới thiệu

Bridge Pattern là giữa những Pattern thuộc đội Structural Pattern.

Bạn đang xem: Bridge pattern là gì

Ý tưởng của nó là tách tính trừu tượng (abstraction) thoát ra khỏi tính lúc này (implementation) của nó. Từ đó có thể dễ dàng sửa đổi hoặc sửa chữa mà ko làm ảnh hưởng đến đầy đủ nơi có áp dụng lớp ban đầu.Sử dụng Bridge Patern khi chúng ta muốn:

Khi bạn muốn tách ràng buộc thân Abstraction với Implementation, để hoàn toàn có thể dễ dàng mở rộng độc lập nhau.Cả Abstraction cùng Implementation của chúng đề xuất được không ngừng mở rộng bằng subsclass.Sử dụng ở những nơi mà lại những đổi khác được tiến hành trong implement không ảnh hưởng đến phía client.

2. Mục đích ra đời

Mình có 3 lấy ví dụ như từ đơn giản dễ dàng đến phức hợp để minh họa cho vấn đề khi chưa tồn tại Bridge Pattern:

VD1

Hãy tưởng tượng rằng rằng mình có 1 con game. Nhân thiết bị của game có 2 ở trong tính là hệ tộc và nghề nhiệp, với từng hệ tộc cùng nghề nghiệp sẽ có được cơ chế chơi khác biệt về kĩ năng, item và nhiều yếu tố khác. Khi tất cả càng các hệ tộc và công việc và nghề nghiệp sẽ dẫn đến số lượng class con cai quản logic cho các trường hợp chọn lựa của bạn chơi bị tạo thêm rất nhiều.

VD2

Trong một công ty có tương đối nhiều loại nhân viên. Mỗi loại nhân viên có một phương pháp tính lương khác nhau.Chương trình quản lý nhân viên của các bạn sẽ tính toán lương cho một nhân viên ra sao họ đưa từ một số loại này sang các loại khác(hoặc gửi từ phòng ban này sang cơ quan khác,). Ví dụ: khi bạn apply vào địa chỉ developer của một công ty phần mềm, khi bắt đầu làm thì các bạn là junior, một bậc cao hơn nữa là senior, và cao hơn thế nữa là vai trò leader.Mỗi lần “lên cấp” như vậy là 1 trong lần đổi khác công thức tính lương.

VD3

Giả sử các bạn có class Shape và 2 subclass là hình tròn trụ và Hình vuông. Sau đó, do yêu cầu phát sinh, bạn có nhu cầu kết hợp thêm màu sắc vào là Đỏ với Xanh. Tuy vậy thì bạn đã có hai subclass rồi, nên mong muốn thêm màu sắc thì bạn phải khởi tạo 4 subclass là hình vuông Xanh, hình vuông Đỏ, hình tròn trụ Xanh, hình trụ đỏ…Nếu ta thêm một màu sắc hoặc một hình nữa thì sẽ phải tạo thêm lớp kế thừa.

=> Vấn đề: việc thêm các loại hình dạng và màu sắc mới vào hệ thống thì sẽ phải tạo lập thêm các lớp kế thừa.

Vấn đề này xẩy ra khi họ cố gắng không ngừng mở rộng Shape và màu sắc theo hai phía độc lập, một sự việc rất phổ biến đối với Kế thừa trong lập trình phía đối tượng.

*

Từ đó mẫu mã Bridge ra đời, nó giúp biến hóa từ kế thừa sang thành phần.

Giải pháp: vào lớp Shape bao gồm một nằm trong tính là Color, màu sắc thì rất có thể thêm các màu thừa kế như Xanh Đỏ Tím rubi tùy ý. Lúc đó muốn Hình Chữ Nhật Đỏ ta chỉ cần Hình Chữ Nhật có thuộc tính color là đỏ thôi, tương tự với các hình khác mà không cần phải kế quá nhiều.

*

3. Loài kiến trúc

*

Các thành phần trong mô hình:

Abstraction (Shape): định nghĩa giao diện của lớp trừu tượng, cai quản việc tham chiếu đến đối tượng người dùng hiện thực cụ thể (Implementation).Refined Abstraction (Circle, Square): kế thừa Abstraction.

Xem thêm: " Not Really Nghĩa Là Gì ? No Not Really Tiếng Việt Là Gì

Implementation (Color): định nghĩa giao diện cho những lớp hiện nay thực. Thường thì nó là interface định ra những tác vụ nào đó của Abstraction.ConcreteImplementation (Red, Blue): kế thừa Implementation và định nghĩa cụ thể hàm thực thi.

4. Ưu & nhược điểm

Ưu điểmGiảm sự phục thuộc thân abstraction và implementation (loose coupling): tính kế thừa trong OOP thường đính thêm chặt abstraction cùng implementation thời điểm build chương trình. Bridge Pattern rất có thể được dùng làm cắt đứt sự nhờ vào này và mang lại phép chúng ta chọn implementation cân xứng lúc runtime.Giảm số lượng những lớp bé không nên thiết: một vài trường hợp thực hiện tính inheritance sẽ tăng con số subclass khôn xiết nhiều. Ví dụ: trường hợp lịch trình view hình hình ảnh trên những hệ điều hành khác nhau, ta có 6 loại hình (JPG, PNG, GIF, BMP, JPEG, TIFF) với 3 hệ quản lý (Window, MacOS, Ubuntu). áp dụng inheritance vào trường thích hợp này sẽ làm ta kiến thiết 18 lớp: JpgWindow, PngWindow, GifWindow, …. Trong những lúc áp dụng Bridge vẫn giảm số lượng lớp xuống 9 lớp: 6 lớp ứng cùng với từng implement của Image với 3 lớp ứng cùng với từng hệ điều hành, từng hệ điều hành quản lý sẽ có một tham chiếu đến đối tượng người tiêu dùng Image cụ thể.Code đang gọn đần độn hơn và kích cỡ ứng dụng sẽ nhỏ tuổi hơn: vì giảm được số class không phải thiết.Dễ gia hạn hơn: những Abstraction và Implementation của chính nó sẽ dễ dàng dàng chuyển đổi lúc runtime cũng như khi cần đổi khác thêm bớt trong tương lai.Dễ dàng không ngừng mở rộng về sau: thông thường các áp dụng lớn thường xuyên yêu cầu chúng ta thêm module cho vận dụng có sẵn tuy nhiên không được sửa đổi framework/ứng dụng gồm sẵn vì những framework/ứng dụng đó rất có thể được công ty tăng cấp lên version mới. Bridge Pattern sẽ giúp bọn họ trong trường hòa hợp này.Cho phép ẩn các cụ thể implement từ client: do abstraction và implementation hoàn toàn chủ quyền nên bạn cũng có thể thay đổi một thành phần mà lại không tác động đến phía Client. Ví dụ, những lớp của công tác view ảnh sẽ độc lập với thuật toán vẽ ảnh trong những implementation. Bởi vậy ta hoàn toàn có thể update công tác xem ảnh khi bao gồm một thuật toán vẽ ảnh mới mà không cần thiết phải sửa đổi nhiều.Nhược điểmCó thể có tác dụng tăng độ phức tạp khi áp dụng cho một lớp tất cả tính kết nối cao

5. Khi nào thì sử dụng

Bridge được thực hiện khi:

Khi muốn bóc ràng buộc giữa Abstraction và Implementation, để hoàn toàn có thể dễ dàng mở rộng hòa bình nhau.Khi cả Abstraction với Implementation của chúng đề xuất được không ngừng mở rộng bằng subclass.Thay đổi trong thành phần được bổ sung thêm của một Abstraction nhưng không ảnh hưởng đối với những Client

6. Source code minh họa cùng với C#

Các xem xét khi mua đặt:

Cần xác định rõ các chiều trực giao trong link giữa những class. Các yếu tố dùng làm xác định khi tách bóc class rất có thể là abstraction/platform, domain/infrastructure, font-end/back-end, interface/implementation.Với mỗi platform, chế tạo một concrete implementation nhưng đảm bảo an toàn các class này hầu hết tuân theo Implementation interface.Trong abstraction class, thêm một trường có kiểu Implementation. Abstraction đã ủy nhiệm lại các bước cho implementation object được tham chiếu đến.Nếu hệ thống có tương đối nhiều logic cấp cao khác nhau, tạo thành các lớp refined abstraction từ bỏ lớp abstraction cha.Client code nên đưa implementation object vào constructor của abstraction để chế tác mối liên kết. Sau thời điểm khởi tạo nên abstraction hoàn chỉnh thì client có thể làm việc với abstraction mà không cần bận tâm đến implementation.

class Program static void Main(string<> args) Console.WriteLine("Tao doi tuong"); var blue_color = new Blue(); var red_color = new Red(); Square blue_square = new Square màu sắc = blue_color ; Square red_square = new Square màu sắc = red_color ; Circle blue_circle = new Circle color = blue_color ; Circle red_circle = new Circle màu sắc = red_color ; Console.WriteLine($"Mau hinh chu nhat xanh: blue_square.GetColor()"); Console.WriteLine($"Mau hinh chu nhat do: red_square.GetColor()"); Console.WriteLine($"Mau hinh tron xanh: blue_circle.GetColor()"); Console.WriteLine($"Mau hinh tron do: red_circle.GetColor()"); interface color string GetColor(); class blue : color public string GetColor() return "Blue"; class Red : màu sắc public string GetColor() return "Red"; abstract class Shape public color color get; set; public string GetColor() return color.GetColor(); class Square : Shape class Circle : Shape

7. Design Pattern liên quan

AdapterAdapter và Bridge giống như nhau là đều sẽ nhờ vào một lớp khác để thực hiện một vài xử lý làm sao đóKhác nhau:Khác về mục tiêu sử dụngAdapter được dùng để biến hóa một class/ interface sang một dạng khác hoàn toàn có thể sử dụng được, giúp các lớp không tương thích vận động cùng nhau mà thông thường là ko thể.Bridge được áp dụng để tách bóc thành phần trừu tượng (abstraction) với thành phần triển khai (implementation) riêng biệt.Khác nhau về thời điểm ứng dụngAdapter tạo nên mọi thứ có thể hoạt động với nhau sau khi chúng đã có thiết kế (đã tồn tại)Bridge nên được thiết kế với trước lúc phát triển hệ thống để Abstraction với Implementation có thể thực hiện tại một biện pháp độc lập.

Xem thêm: Thần Trùng Là Gì - Và Lời Giải Đáp Về Các Hiện Tượng Tâm Linh

Abstract Factory: hoàn toàn có thể sử dụng cùng rất Bridge. Bài toán ghép nối này rất hữu ích khi một số trừu tượng được xác định bởi Bridge chỉ bao gồm thể vận động với những triển khai chũm thể. Vào trường đúng theo này, Abstract Factory rất có thể đóng gói các quan hệ này với ẩn sự phức hợp khỏi Client.Builder: hoàn toàn có thể kết hợp với Bridge. Director class hoàn toàn có thể giữ sứ mệnh là Abstraction, vào khi những Builder class khác duy trì vai trò ImplementationBài viết của mình đến đó là kết thúc, cảm ơn các bạn đã theo dõi. Nếu các bạn thấy hữu ích có thể khám phá thêm Series kiến thiết Patterns - Trợ thủ ý hợp tâm đầu của Developers của mình!!