DucVA's Blog

Factory Method | June 29, 2010

The 1st sample, chúng ta hãy xem xét đến những công ty sản xuất ô tô.

Với cùng 1 chức năng là chế tạo ra những chiếc ô tô, nhưng mỗi công ty lại có những chủng loại ô tô của riêng mình. BMW có Sedan, Rover, X series,….

Trong khi Toyota có Camry, Innova, hay Land Cruise,…

The 2nd sample, trong những hệ thống có lưu trữ dữ liệu, chúng ta thường biết đến đối tượng DataBase Connection,

với chức năng tạo và thể hiện 1 kết nối tới cơ sở dữ liệu, nhưng với từng loại cơ sở dữ liệu khác nhau, chúng ta có những kết nối khác nhau:

SQL Server có SqlConnection, MySQL Server có MySqlConnection ACCESS có OLE DBConnection,…

2 Ví dụ trên cho thấy 1 hiện tượng: cùng 1 loại đối tượng, với cùng 1 chức năng, nhưng với từng loại cụ thể hơn lại cho kết quả khác nhau. Đây có thể coi là ý tưởng cơ bản của Factory Method Pattern, tuy nhiên Factory Method còn làm được nhiều hơn thế. Definition: Là một mẫu cho phép định nghĩa một Interface hoặc 1 abstract class cung cấp phương thức khởi tạo 1 loại đối tượng, hoặc thực hiện 1 chức năng nào đó, nhưng việc đối tượng của class nào được tạo ra, hay chức năng thực hiện như thế nào lại do các sub-classes hoặc implement classes quyết định, tùy theo trường hợp, và tham số đầu vào. Diễn giải một cách cụ thể hơn với 2 ví dụ trên: Công ty sản xuất ô tô có thể coi là IAutoCompany Interface với 1 phương thức createInstance() trả về một thể hiện của IVehicle interface. Các công ty sản xuất ô tô khác nhau tương ứng với các Implemented classes của IAutoCompany. Chúng ta có: BMWCompany và ToytaCompany. Tương ứng với mỗi công ty, chúng ta có các class loại ô tô, implement giao diện IVehicle: BMWAuto, RoverAuto, CamryAuto, InnovaAuto.

Factory method

Factory method

Từ trên nhìn xuống, chúng ta có thể thấy rằng, các thành phần sử dụng IAutoCompany không cần quan tâm cụ thể đến các class *Auto, và chỉ cần biết rằng thể hiện của IAutoCompany sẽ nhận vào 1 tham số và trả về 1 thể hiện của giao diện IVehicle. Chính xác thể hiện của *Auto class nào thì là do các Implemented classes của IAutoCompany.

Các trường hợp sử dụng Factory Method:

– Khi một thành phần không cần quan tâm tới thể hiện của class nào được tạo ra.

– Khi một thành phần muốn các Implemented classes quyết định kết quả thực hiện

– Khi một thành phần cần thao tác với Interface chứ không phải class cụ thể.

– Che dấu lớp thực thi cụ thể (concreate classes) đối với thành phần gọi tới.


Posted in Design Pattern

Leave a Comment »

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: