Design Pattern: Sự khác nhau giữa Bridge và Strategy (Policy)

Design Pattern: Sự khác nhau giữa Bridge và Strategy (Policy)

Nghiên cứu về design pattern, việc nắm vững bản chất của các Pattern là rất quan trọng. Nếu không sẽ rất dễ nhầm lần giữa các Design Patterns với nhau.

Bridge Pattern và Policy Pattern là một ví dụ. Bạn có thể tìm thấy tài liệu về chúng ở khắp nơi trên Google. Chúng hao hao giống nhau nếu bạn cứ dán mắt vào mấy cái Diagram. Và sự thật là phải mất nhiều thời gian mình mới phân biệt được chúng. Vậy sự khác nhau giữa chúngđây là gì:

1. Brige Pattern là để tách rời phần xử lý (giải thuật…) với phần chủ thể (nơi thực thi các giải thuật đó). Phần xử lý hầu như chỉ có tác dụng bên trong phần chủ thể và không bao giờ được sử dụng ở các nơi khác. Ngoài ra các phần xử lý hầu như chỉ sử dụng cho chủ thể tương ứng (ví dụ nếu ta xác định một Bridge giữa 2 class A và A’ thì class A’ sẽ chỉ được xử dụng trong A và không sử dụng trong B (cùng abstract với A)

Đúng như tên gọi của nó, Brige Pattern bao gồm phần Abstract định nghĩa 2 đầu của một cây cầu. Các Implementation triển khai các Abstract đó thành từng cặp, và chỉ dùng theo cặp. Không có mục đích “thay đổi linh hoạt” như Strategy Pattern.

Chú ý là không chỉ là Brige giữa các cặp đôi, mà Bridge có thể mở rộng cho một bộ các “đầu mối” khác nhau nữa.

Ví dụ bạn Abstract của một hoạt động Import dữ liệu bao gồm:

  • - Phần đọc dữ liệu/ Chuẩn hóa dữ liệu/ Lưu nháp
  • - Phần validator, đảm bảo dứ liệu tuân thủ business
  • - Phần Intergration, đưa dữ liệu vào cơ sở dữ liệu thực

Tại sao lại dùng Bridge ở đây. Đơn giản là vì: thứ nhất bạn phải kết nối giữa 3 “đầu cầu” trên. Thứ hai, khi bạn Import Addresses, Import Products… bạn không thể sử dụng Validator của Import Address làm validator của Import Products được.

Hữu ích: bạn có thể dễ dàng thay đổi nâng cấp của Import Addresses mà không cần quan tâm đến business của Import Products có thay đổi hay không. Đây gọi là nâng cấp từng phần.

2. Strategy (Policy) Pattern thì khác, một chủ thể có thể sự dụng linh hoạt khác policy khác nhau.

Đó giải thích tên gọi của nó, “Chiến lược”. Chiến lược gì? Chiến lược sử dụng các triển khai của Abstract. Lúc này tôi có rất nhiều dữ liệu tôi muốn sử dụng Quick Sort, lúc khác tôi chỉ có vài phần từ thôi nên tôi dùng Bubble Sort là đã ok rồi….

Bạn thấy bài viết này như thế nào?: 
Average: 5 (1 vote)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Hướng dẫn chính cho Drupal 8: Episode 2 - Mobile Improvements

Hướng dẫn chính cho Drupal 8: Episode 2 - Mobile Improvements

Successive posts will gradually get more technical, so feel free to skip to later parts (once they're published) if you're more on the geeky side.

Khóa học Drupal trực tuyến

Bình Dương mở khóa học Drupal trực tuyến

Bạn đang là lập trình viên PHP, Bạn đang muốn xây dựng 1 website thật nhanh chóng nhưng vẫn đảm bảo nhanh, bảo mật, linh động, đẹp, ...

DrupalCon năm 2015 diễn ra tại Latin America

DrupalCon năm 2015 diễn ra tại Latin America

Yes – it’s true! After extensive research, we have selected the location of DrupalCon Latin American 2015…drumroll please…

Công ty diệt chuột T&C

 

Diet con trung