Tóm tắt các Behavioral Patterns của GOF

Trong software engineering, behavioral design pattern là các design patterns xác định những kiểu mẫu giao tiếp chung giữa các object và hiện thực hóa nó. Bằng cách này, các pattern này gia tăng sự linh hoạt trong việc điều hành giao tiếp giữa các object.
Chain of responsibility
Chuyển request giữa một dây chuyền các objects
Command
Đóng gói request thành một object
Interpreter
Phương pháp phân tích cú pháp cho chương trình
Iterator
Hỗ trợ truy xuất đến các phần tử của một tập hợp
Observer
Báo hiệu có sự thay đổi của một object với object khác
Mediator
Định nghĩa một điểm trung tâm để các object giao tiếp với nhau
Memento
Lưu giữ và trả về trạng thái bên trong của object
State
Thay đổi hành vi của object khi trạng thái của nó thay đổi
Strategy
Chứa nhiều option để thực hiện một hành vi trong nội bộ class cho phép người dùng tùy biến sử dụng.
Template method
Chuyển giao các bước thực hiện của một thuật toán/ hành vi cho các subclass thực hiện.
Visitor
Định nghĩa một operation cho một class mà không cần thay đổi class đó
Phương pháp sử dụng
– Chain of responsibility, Command, Mediator, và Observer xác định phương pháp decouple các object gửi vào nhận (sender và receiver) với các mặt lợi hại khác nhau. Chain of responsibility chuyển một sender request qua một dây chuyền của các receivers. Command chuyên biệt hóa request giữa sender và receiver bằng subclass. Mediator nắm giữ cả sender và receiver và đóng vai trò trung gian. Observer định nghĩa một interface cho phép nhiều object lắng nghe sự thay đổi trên một object.
– Chain of responsibility có thể dùng Command để thể hiện request dưới dạng object.
– Chain of responsibility thường được sử dụng cùng với Composite. Trong đó, một object cha có thể hoạt động như lớp con của nó.
– Command và Memento hoạt động như một tấm thẻ (token) lưu chuyển và được sau đó được kích hoạt. Trong Command, token đại diện cho một request trong khi ở Memento nó đại diện cho một trạng thái của một object ở một thời điểm nhất định. Polymorphism đóng vái trò quan trọng trong Command, nhưng trong Memento nó ko quan trọng vì interface của nó quá hạn chế, chỉ có thể luân chuyển như những giá trị mà thôi.
– Command có thể dùng Memento để duy trì trạng thái cần thiết cho nhu cầu phục vụ cho hành động undo.
– Một Command có nhu cầu cần phải sao lưu trước khi được đưa vào danh sách history hoạt động như một Prototype.
– Interpreter có thể dùng State để định nghĩa ngữ cảnh phân tích (parsing context).
– Cấu trúc cây syntax của Interpreter là một Composite và có thể dùng kèm thêm với Iterator và Visitor.
– Các ký tự kết thúc (Terminal Symbol) nằm trong cây ngữ cảnh của Intepreter có thể được dùng chung hay chia sẻ với Flyweight.
– Iterator có thể duyệt Composite.
– Visitor có thể apply các hành động lên một Composite.
– Các đa hình trên Iterator dựa trên Factory Method để khởi tạo các Iterator subclass tương ứng.
– Mediator và Observer là hai pattern cạnh tranh lẫn nhau. Observer phân tán các thông tin liên lạc bằng cách dùng observer và các subject object lắng nghe trong khi Mediator đóng gói toàn bộ giao tiếp giữa object thông qua lớp Mediator trung gian.
– Mặt khác, Mediator có thể tận dụng Observer cho việc đăng ký động các colleagues và các giao tiếp giữa chúng.
– Mediator giống Facade ở việc abstract những chức năng của các class. Tuy nhiên, Mediator có vai trò quan trọng hơn là làm trung tâm cho giao tiếp giữa các objects và được tham chiếu bởi các object tham gia giao tiếp. Trong khi đó, Facade định nghĩa một interface đơn giản để giao tiếp với hệ thống bên trong, nó ko thêm chức năng cho hệ thống và hệ thống bên trong cũng ko tham chiếu đến nó.
– Memento thường được dùng chung với Iterator. Một Iterator có thể dùng Mementor để lưu giữ trạng thái của một vòng lặp. Iterator lưu Mementor trong nột tại của nó.
– State và Strategy giống nhau về cấu trúc nhưng khác nhau về ý nghĩa sử dụng.
– Flyweight giải thích khi nào và bao giờ State object được chia sẻ.
– State object thường là các Singleton.
– Strategy thay đổi hoạt động, Decorator thay đổi diện mạo của object.
– Strategy pattern của behavioral pattern tương đương với Builder đối với Creational pattern.
– Strategy có 2 cách cài đặt khác nhau. Cách thứ nhất giống với State. Sự khác biệt nằm ở chỗ Strategy chỉ định nghĩa các option cho hành động một lần trong khi State thì linh hoạt hơn.
– Stategy objects thường tạo ra các Flyweight tốt.
– Strategy cũng giống như Tenplate method ngoại trừ nó không chi tiết bằng.
– Strategy thay đổi toàn bộ, Template Method dùng tính thừa kế để thay đổi các phần của thuật toán / các phần của một hành động cần xử lý.
– Visitor pattern giống nhưng mạnh hơn Command vì Visitor có thể khởi tạo bất cứ thứ gì thích hợp cho những loại object mà nó gặp phải.
No Comments

Post A Comment