Cài đặt Execute bằng cách gọi một thao tác tƣơng ứng trên Receiver
Client (CommandApp): tạo ra một đối tƣợng ConcreteCommand và thiết lập đối tƣợng nhận của nó
Invoker (User): đề nghị command để thực hiệu yêu cầu
Receiver (Calculator): biết cách để thực hiện các thao tác kết hợp việc thực hiện các yêu cầu
Dùng mẫu Command khi :
Tham số hoá các đối tƣợng theo thủ tục mà chúng thi hành, nhƣ đối tƣợng MenuItem ở trên.
Xác định, xếp hàng và thi hành các yêu cầu tại những thời điểm khác nhau.
Cho phép quay ngƣợc. Thủ tục Execute của lớp Command có thể lƣu lại trạng thái để cho phép quay ngƣợc các biến đổi mà nó gây ra. Khi đó lớp Command trừu tƣợng cần định nghĩa thêm hàm Unexecute để đảo ngƣợc các biến đổi. Các commands đã đƣợc thi hành sẽ đƣợc lƣu trong một danh sách, từ đó cho phép undo và redo không giới hạn mức.
Cần hỗ trợ ghi lại các commands đã đựơc thi hành để thi hành lại trong trƣờng hợp hệ thống gặp sự cố.
Thiết kế một hệ thống với các thủ tục bậc cao đựơc xây dựng dựa trên các thủ tục nguyên thuỷ. Cấu trúc này thƣờng gặp trong các hệ thống thông tin hỗ trợ “phiên giao dịch”. Một phiên giao dịch là một tập hợp các sự thay đổi lên dữ liệu. Mẫu Command cung cấp cách thức mô tả phiên giao dịch. Nó có giao diện chung cho phép khởi xƣớng các phiên làm vịêc với cùng một cách thức và cũng cho phép dễ dàng mở rộng hệ thống với các phiên giao dịch mới.
Một Composite có thể đƣợc sử dụng để cài đặt các MacroCommands.
Một Memmento có thể lƣu lại các trạng thái để Command yêu cầu phục hồi lại các hiệu ứng của nó.
Một command phải đƣợc sao lƣu trƣớc khi nó đƣợc thay thế bằng các hành động trƣớc đó nhƣ là một Prototype.
1.3.3.3. Interperter
Nếu một dạng bài toán có tần suất xuất hiện tƣơng đối lớn, ngƣời ta thƣờng biểu diễn các thể hiện cụ thể của nó bằng các câu trong một ngôn ngữ đơn giản. Sau đó ta có thể xây dựng một trình biên dịch để giải quyết bài toán bằng cách biên dịch các câu.
Ví dụ, tìm kiếm các xâu thoả mãn một mẫu cho trƣớc là một bài toán thƣờng gặp và các “biểu diễn thông thƣờng” tạo thành ngôn ngữ dùng để diễn tả các mẫu của
xâu. Thay vì xây dựng từng thuật toán riêng biệt để tƣơng ứng mỗi mẫu với một tập các xâu, ngƣời ta xây dựng thuật toán tổng quát có thể phiên dịch các “biểu diễn thông thƣờng” thành tập các xâu tƣơng ứng.
Mẫu Interpreter miêu tả cách thức xây dựng cấu trúc ngữ pháp cho những ngôn ngữ đơn giản, cách thức biểu diễn câu trong ngôn ngữ và cách thúc phiên dịch các câu đó. Trong ví dụ cụ thể này, nó miêu tả cách thức xây dựng cấu trúc ngữ pháp cho các biểu diễn thông thƣờng, cách thức xây dựng biểu diễn thông thƣờng và cách thúc phiên dịch các biểu diễn thông thƣờng đó.
Giả sử cấy trúc ngữ pháp sau xác định các biểu diễn thông thƣờng:
expression ::= literal | alternation | sequence | repetition | '(' expression ')'
alternation ::= expression '|' expression sequence ::= expression '&' expression repetition ::= expression '*'
literal ::= 'a' | 'b' | 'c' | ... { 'a' | 'b' | 'c' | ... }* Mẫu Interpreter sử dụng các lớp để diễn tả các quy luật ngữ pháp. Khi đó cấu trúc ngữ pháp trên đƣợc diễn tả bởi năm lớp : lớp trừu tƣợng RegularExpression và bốn lớp con của nó : LiteralExpression, AlternationExpression, SequenceExpression và RepetitionExpression trong đó ba lớp cuối có các biến để chứa các biểu thức con.