1. Giới thiệu Factory Parttern
Factory Parttern là
thiết kế mẫu hướng đối tượng trong việc thiết kế
phần mềm , Nó trực thuộc nhóm thiết kế có chức năng tạo đối tượng (Creational Parttern). Mẫu này nhằm giải quyết vấn đề tạo một đối tượng mà không cần thiết chỉ ra một cách chính xác lớp nào sẽ được tạo. Quá trình tạo đối tượng phụ thuộc vào việc cung cấp dữ liệu đầu để thực hiện quá trình tạo đối tượng.
Factory method giải quyết vấn đề này bằng cách định nghĩa một phương thức cho việc tạo đối tượng, và các lớp con thừa kế có thể override để chỉ rõ đối tượng nào sẽ được tạo. Nói chung, "factory method" thường được áp dụng cho những phương thức mà nhiệm vụ chính của nó là tạo ra đối tượng.
2. Mô tả mẫu thiết kê Factory
Để hiểu được cơ chế làm việc của mẫu thiết kế Factory chúng ta sẽ phân tích và làm rõ hình dưới đây :
Hình số 1 : Mô tả mẫu thiết kế Factory
Trong hình trên
X là lớp cơ sở,
XY và
XZ là lớp dẫn xuất của lớp
X, lớp XFactory là lớp sẽ quyết định xem lớp dẫn xuất
XY hay
XZ là kết quả trả về của phương thức getClass, kết quả này phụ thuộc vào tham số truyền vào phương thức của phương thức getClass.
3. Ví dụ minh họa
Viết một chương trình bằng C# cho phép người sử dụng nhập thông tin về tên và họ với định dạng “Tên, họ” hoặc “Tên họ” ví dụ “Nam Nguyễn Văn” hoặc “Nam, Nguyễn Văn”. Sau đó chúng ta tách Họ và tên riêng rẽ dựa trên Họ và tên mà người sử dụng nhập vào. Yêu cầu là phải sử dụng hướng đối tượng và áp dụng cơ chế kế thừa (Lớp Tên, lớp họ … phải được tách riêng).
Bước 1 : Tạo lớp cơ sở Namer như sau :
Bước 2 : Tạo 2 lớp FirstFirst và LastFirst tương ứng với 2 format dụ “Nam Nguyễn Văn” hoặc “Nam, Nguyễn Văn”.
Lớp FirstFirst

Mục tiêu của lớp này là xử lý vấn đề của định dạng “Nam Nguyễn Văn”, trong đó giả định trước dấu “ “ đầu tiên đó là Tên. Sau dấu cách đó là Họ và tên đệm.
Lóp LastFirst
Lớp này xử lý các vấn đề định dạng theo dấu phảy ví dụn “Nam, Nguyễn Văn”, trước dấu phải là tên, sau dấu phảy là Họ và tên đệm.
Cài đặt lớp này như sau :
Bước 3 Tạo lớp Factory và cách sử dụng lớp Factory
Lớp NameFactory
Lớp này trả về đối tượng thể hiện của lớp FirstFirst hay LastFirst thông qua phương thức getName với tham số truyền vào là tên (áp dụng cho cả 2 định dạng), giá trị này phụ thuộc vào cách kiểm tra dấu “,” trong chuỗi họ tên. Nếu vị trí dấu “,” > 0 có nghĩa là chuỗi họ tên thuộc định dạng số 2 (Ví dụ “Nam, Nguyễn Văn”), ngược lại chuỗi họ tên sẽ trực thuộc định dạng số 1 (Ví dụ “Nam Nguyễn Văn”).
Cài đặt lớp này như sau :

Minh họa sử dụng Factory trong hàm Main() của chương trình C#

Lược đồ class sẽ mô tả chi tiết của Parttern này như sau :
Hình số 2 : Ví dụ minh họa mẫu thiết kế Factory