Design Pattern: Factory Method

 

Chào mừng các bạn đến với chủ đề Design Pattern 

Chúng ta sẽ tìm hiểu về một  pattern  tiếp theo trong nhóm creational pattern: Factory Method Pattern.

1. Cơ chế của Factory Method.

+ Giả sử muốn tạo các đối tượng lớp A1 và lớp A2 đều kế thừa từ lớp A.

Người ta sẽ xây dựng một lớp C và trong lớp C sẽ tạo một phương thức khởi tạo

các đối tượng A1 và A2 và trả về đối tượng chung là của lớp A.

+ C là một lớp giao diện, và thông qua C để khởi tạo ra A1 và A2.

+ Factory Method có điểm giống vời Abstract Factory, chỉ khác nó là ít hơn một cấp so với Abstract Factory.

Ví dụ cho thực tế:

Cũng vẫn bài toán cửa hàng bán đồ điện tử.

Abstract Factory sẽ dùng khi shop bán sản phẩm của nhiều nhà sản xuất như sam sung, apple…

Nhưng nếu trong trường hợp shop chỉ bán sản phẩm của 1 nhà sản xuất là sam sung.

=> Thì áp dụng factory method sẽ hợp lý hơn.

Bài toán như sau:

+ Một đại lý của sam sung kinh doanh điện thoại và máy tính bảng (chỉ của sam sung)

+ Khách hàng đến cửa hàng và muốn xem thông tin của tất cả các sản phẩm cửa hàng đang có.

+ Vậy thì khách hàng vốn không có sản phẩm nào, và cửa hàng phải có sản phẩm và show các thông tin cho họ xem.

2. Sơ đồ UML abstract Factory.

 

Áp dụng cho bài toán cửa hàng bán đồ điện tử.

 

3. Code c++ minh họa cho factory method.

Khi bài toán phức tạp hơn, thì có thể áp dụng theo sơ đồ trên.

Còn trong các bài toán đơn giản tôi có thể sử dụng luôn phương thức GetProduct

trong lớp Creator mà không cần khai báo thêm một lớp kế thừa nó.

a. Xây dựng lớp cơ sở EProducts: và hai lớp kế thừa là sản phẩm: PhoneTablet

b. Xây  dựng lớp interface, tạo các sản phẩm.

c. Xây dựng lớp cửa hàng, chứa và quản lý các sản phẩm.

d.  Khởi tạo xây dựng cửa hàng và test show sản phẩm cửa hàng trong hàm main

Khi gặp bài toán tương tự như bài toán cửa hàng bán sản phẩm ở trên, các bạn có thể áp dụng factory method.

Ok. Đó là mẫu factory method design pattern.

 

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.