Design Pattern: Factory Method

Chào mừng các bạn đến với chủ đề Design Pattern Code C++ tại blog: Phát Triển Phần Mềm 123AZ

Và hôm nay 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ử. Nếu như Abstract Factory sẽ dùng khi cửa hàng 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 cửa hàng 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 cửa hàng kinh doanh điện thoại và máy tính bảng của duy nhất một nhà sản xuất đó là 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: Đại diện chung cho các sản phẩm điện tử, 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

Ok. Như vậy đó là mẫu factory method design pattern.

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.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

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