12/08/2018, 16:59

Chain of responsibility design pattern trong Ruby

Tiếp nối loạt bài viết về Design Pattern trước. Bridfe pattern và Facade Pattern bài này mình sẽ giới thiệu về một design pattern nằm trong nhóm behavioral design patterns . đó là Chain of responsibility Trong cuốn sách rất hay về Design Pattern Design Patterns: Elements of Reusable ...

Tiếp nối loạt bài viết về Design Pattern trước. Bridfe pattern và Facade Pattern bài này mình sẽ giới thiệu về một design pattern nằm trong nhóm behavioral design patterns. đó là Chain of responsibility

Trong cuốn sách rất hay về Design Pattern Design Patterns: Elements of Reusable Object-Oriented Software có định nghĩa khá dài và cũng khá là khó hiểu. nên theo tìm hiểu của mình thì mình sẽ nói đơn giản hơn là như thế này: Nó là việc cho tách nhỏ riêng biệt một request của người gửi từ người nhận request đó, bằng việc tạo ra nhiều object để handle request đó. Giả sử bạn có 1 một request cần sử lý với nhiều logic. Nếu sử dung if..else quá nhiều thì sẽ quá phức tạp và khó refactor sau này. Vậy nên Chain of responsibility design pattern tạo ra 1 chuổi các handle. Mỗi Handle xử lý một logic khác nhau và với một điệu kiện cụ thể nào đó. Nói cụ thể hơn thì Chain of responsibility dùng để tránh sự liên kết trực tiếp giữa đối tượng gửi request và đối tượng nhận request khi request đó có thể được xử lý bởi hơn 1 đối tượng. Thực hiện móc nối các đối tượng nhận request đó thành một chuỗi và gửi request theo chuỗi đó cho đến khi request đó được xử lý.

Theo doix UML sau:

Handler :

  • định nghĩa 1 interface để xử lý yêu cầu.
  • Gán giá trị cho đối trượng successor ConcreteHandler:
  • Xử lý yêu cầu.
  • Có thể truy cập đối trượng Successor
  • Nếu đối tượng ConcreteHandler không thể xử lý yêu cầu, nó sẽ gửi tới successor của nó.

Hiểu đơn giãn hơn nữa: Giã sử bạn có 1 chuỗi các hành động. khi nhận được request bạn cho A xử lý. Nếu A không thể xử lý nó sẽ gọi successor của nó để xử lý. cứ như thế cho đến khi không còn ConcreteHandle nào xử lỹ nữa.

Trăm lời nói không bằng 1 ví dụ. mình sẽ thực hiện một ví dụ để thể hiện đống chữ phía trên             </div>
            
            <div class=

0