Khái niệm:
Định nghĩa một interface cho việc tạo ra một đối tượng, nhưng để cho các lớp con quyết định lớp nào sẽ tạo đối tượng. Factory Method cho phép một lớp hoãn việc tạo đối tượng sang các lớp con.
Mức độ sử dụng: cao.
UML Class Diagram:
Những lớp và/hoặc đối tượng trong mẫu thiết kế này:
- Product (Page): định nghĩa interface của các đối tượng mà factory method tạo ra.
- ConcreteProduct (SkillsPage, EducationPage, ExperincePage): thực thi Product interface.
- Creator (Document):
+ xác định factory method trả về đối tượng kiểu Product. Creator cũng có thể định nghĩa một sự thực thi mặc định của factory method trả về một đối tượng ConcreteProduct mặc định.
+ có thể gọi factory method để tạo ra một đối tượng Product.
- ConcreteCreator (Report, Resume): override factory method để trả về một đối tượng của một ConcreteProduct.
Factory Method: Khi nào sử dụng và sử dụng ở đâu
Factory Method cho phép client sử dụng một interface cho việc tạo ra một đối tượng trong khi vẫn duy trì kiểm soát. Mục tiêu chính của fatory Method là khả năng mở rộng. Factory Method thường được sử dụng trong các ứng dụng để quản lý, bảo trì và tính toán những tập hợp các đối tượng khác nhau nhưng có những thuộc tính tương tự nhau trong cùng một thời điểm. Chẳng hạn, một hệ quản trị tài liệu có khả năng mở rộng hơn nếu bạn tham chiếu các tài liệu của bạn như một tập hợp các IDocument. Những tài liệu này có thể là các tập tin Text, các tài liệu Word, các lược đồ Visio… Nhưng chúng lại có một tác giả, một tựa đề, một kiểu, một kích cỡ, một nơi lưu trữ… Khi một loại tài liệu mới đưa ra, đơn giản nó thực thi IDocument interface và nó sẽ phù hợp với phần còn lại của các tài liệu. Để hỗ trợ loại tài liệu mới này, Factory Method có thể phải hoặc không phải điều chỉnh lại (phù thuộc vào cách nó được thực thi, và có hoặc không có tham số). Ví dụ sau cần phải được điều chỉnh:
Factory Method thường được sử dụng trong những thành phần “quản lý”, chẳng hạn như document manager, account manager, permission manager…
Trong những chương trình của bạn, bạn hầu như tạo ra các phương thức trả về các đối tượng mới. Tuy nhiên, không phải tất cả các phương thức trả về đối tượng mới là Factory Method. Vậy khi nào bạn biết được Fatory Method hoạt động? Quy tắc là:
- phương thức tạo ra đối tượng mới
- phương thức trả về một lớp trừu tượng hoặc interface
- lớp trừu tượng hoặc interface được thực thi bởi một số lớp
Demo: