Mục lục
Khái niệm
Facade là một design pattern thuộc loại structural(cấu trúc) pattern cung cấp interface đơn giản hoá cho library, framework hoặc bất kỳ tập hợp class phức tạp nào khác.
Bài toán?
Hãy tưởng tượng bạn phải làm cho code của mình hoạt động với một loạt các đối tượng thuộc về một lib hoặc một framework. Thông thường, bạn cần khởi tạo tất cả các đối tượng đó, theo dõi các phụ thuộc, thực thi các phương thức theo đúng thứ tự,..
Kết quả là, logic nghiệp vụ các class của bạn trở nên kết hợp chặt chẽ với các chi tiết triển khai của bên thứ ba. Khiến cho việc hiểu và duy trì trở nên khó khăn.
Giải pháp
Facade là một class cung cấp một interface đơn giải cho một hệ thống con phức tạp chứ nhiều bộ phận chuyển động. Một facade class có thể cung cấp chức năng hạn chế so với làm việc trực tiếp với các hệ thống con. Tuy nhiên nó chỉ bao gồm các chức năng mà mình cần sử dụng.
Có một facade class tiện lợi khi bạn cần tích hợp ứng dụng của mình với một thư viện phức tạp có hàng tá tính năng, nhưng bạn chỉ cần sử dụng một số chức năng của nó.
Kiến trúc
- Facade cung cấp khả năng truy cập thuận tiện vào một phần cụ thể của chức năng hệ thống con. Nó biết nơi định hướng yêu cầu của khách hàng và cách vận hành tất cả các bộ phận chuyển động.
- Một Additional Facade có thể được tạo để ngăn chặn việc một facade có một số tính năng không liên quan và làm cho nó trở thành một cấu trúc phức tạp khác.
- Hệ thống con phức tạp (Subsystem class) bao gồm hàng chục đối tượng khác nhau.
Các class hệ thống con không nhận thức được sự tồn tại của các class facade. Chúng hoạt động trong hệ thống và làm việc trực tiếp với nhau. - Client sử dụng Facade thay vì gọi trực tiếp các đối tượng của hệ thống con.
Áp dụng khi nào?
Sử dụng Facade pattern khi bạn cần interface hạn chế nhưng đơn giản cho một hệ thống con phức tạp.
Sử dụng Facade khi bạn muốn cấu trúc của một hệ thống con thành các layer nhỏ khác.
Cách triển khai
- Kiểm tra xem liệu có thể cung cấp interface đơn giản hơn những gì hệ thống con hiện tại đã cung cấp hay không? Cách làm đúng là code của bạn phải độc lập với nhiều class của hệ thống con.
- Khai báo và triển khai interface này trong một class Facade mới. Facade phải chuyển hướng cuộc gọi từ code của bạn đến các đối tượng trong hệ thống con. Facade phải chịu trách nhiệm khởi tạo hệ thống con và quản lý vòng đời tiếp theo của nó.
- Hãy làm cho tất cả code của bạn chỉ giao tiếp với các hệ thống con thông qua class Facade.
- Nếu class facade trở nên quá lớn, hãy tách thêm class facade mới.
Ưu và nhược điểm
|
|
Demo
Các bạn có thể tham khảo demo Design pattern Facade ở đây nhé
Như vậy là mình đã giới thiệu xong về Facade Design Pattern. Đây là một pattern sẽ được hỏi khá nhiều trong các câu hỏi phỏng vấn của các công ty trong trình độ fresher, intern. Nếu có gì không hiểu thì đừng ngại comment phía dưới nhé. Chúc các bạn có ngày học tập hiệu quả, và đừng quên tham gia Group để trao đổi kiến thức nhiều hơn nhé.