2009-11-23 26 views
6

Làm cách nào để biết rằng tôi cần mẫu mặt tiền tại thời điểm phát triển ứng dụng?Sử dụng mẫu mặt tiền

Làm cách nào để vẽ đường thẳng giữa Mẫu mặt tiền và Mẫu mẫu?

Ví dụ: Trong [this] bài viết, chúng tôi thấy rằng, int placeOrder(int CustomerID, List<BasketItem> Products) có một số bước được xác định trước trong thuật toán. Vậy tại sao tác giả không sử dụng Mẫu Mẫu ở đây?

+3

Bạn có ý gì khi vẽ đường thẳng giữa Mặt tiền và Mẫu? Mặt tiền là một mô hình cấu trúc và mẫu là một mô hình hành vi- Tôi không thấy làm thế nào bạn có thể liên kết hai? – RichardOD

Trả lời

9

Giao dịch mặt tiền có giao diện, không triển khai. Mục đích của nó là để ẩn nội bộ phức tạp đằng sau một giao diện duy nhất xuất hiện đơn giản ở bên ngoài. Trong ví dụ từ câu hỏi của bạn, mặt tiền ẩn bốn lớp (Order, OrderLine, Address, BasketItem) đằng sau một phương thức duy nhất.

Phương thức mẫu đề với việc triển khai. Mục đích của nó là để trích xuất các thuật toán phổ biến từ một số thuật toán mà chỉ khác nhau trong một 'điền vào chỗ trống'. Phương thức mẫu trong lớp siêu thực hiện thuật toán phổ biến và mỗi lớp con điền vào các khoảng trắng theo cách riêng của nó.

Vậy tại sao tác giả không sử dụng Mẫu mẫu ở đây?

Sẽ có ý nghĩa khi thực hiện placeOrder phương thức mẫu nếu có một số phiên bản tương tự của thao tác. Có thể một vài phương pháp như placePhoneOrder, placeInternetOrder, placeManuallyEnteredOrder có thể được cấu trúc lại thành một mẫu đơn placeOrder với một số lớp con chỉ thực hiện các sự khác biệt cụ thể {phone, internet, manual}.

+0

Tuyệt vời! Tôi tìm thấy chính xác những gì tôi cần từ nó. – anonymous

3

Giả sử bạn có một vài dịch vụ, thư viện hoặc bất kỳ thứ gì. Những thư viện này cần sự liên kết để thực hiện một số dịch vụ cấp cao hơn. Sau đó, bạn có thể muốn bao bọc các cuộc gọi và mã intialization đó thường đi cùng nhau và cung cấp một loạt các chức năng để ẩn các chi tiết đó và làm cho nó đơn giản để sử dụng các dịch vụ đó cho các tình huống cụ thể. Sau đó, nó là một sử dụng tốt cho mô hình mặt tiền.

CẬP NHẬT: Trong bài viết đề cập đến phương pháp PlaceOrder có một triển khai duy nhất hoạt động cho tất cả các đơn đặt hàng. Mẫu khuôn mẫu có nghĩa là quy định một loạt các bước phải được theo dõi nhưng cho phép các lớp con cung cấp việc triển khai tùy chỉnh các bước cố định đó. Ví dụ, nếu bạn cần các đơn đặt hàng cho TV được xử lý khác với đơn đặt hàng cho vi sóng, bạn có thể sử dụng mẫu mẫu để xác định lại phương thức DispatchParcel tưởng tượng (để gửi lò vi sóng như một gói đơn giản nhưng truyền hình với dịch vụ bổ sung để giúp nâng thiết bị nặng lên tầng trên). Trong trường hợp của chúng tôi, không cần thiết phải thực hiện lại các bước của ProcessOrder để không cần mẫu khuôn mẫu như một triển khai đơn lẻ phù hợp với tất cả các loại lệnh.

7

Mẫu mặt tiền phù hợp khi bạn có hệ thống phức tạp mà bạn muốn hiển thị cho khách hàng theo cách đơn giản hoặc bạn muốn tạo lớp giao tiếp bên ngoài trên hệ thống hiện có không tương thích với hệ thống của bạn. Đây là mẫu cấu trúc. Xem tại đây: http://en.wikipedia.org/wiki/Facade_pattern

Mẫu mẫu, mặt khác, là mẫu hành vi sẽ giúp bạn khi xử lý việc triển khai bên trong thành phần. Xem tại đây: http://en.wikipedia.org/wiki/Template_method_pattern

Các vấn đề liên quan