Translate

Thứ Tư, 7 tháng 5, 2014

Factory pattern vs Abstract Factory pattern

Factory Partern là gì:
Factory pattern là một mẫu thiết kế hướng đối tượng (design pattern), 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.  Factory class đóng vai trò như một “nhà xưởng”, có nhiệm vụ khởi tạo đối tượng “cụ thể” khi ứng dụng đang chạy (chứ không phải lúc compile time)

Ứng dụng:
Chúng ta ứng dụng Factory method pattern trong những trường hợp sau :
_ Khi bạn muốn tạo một đối tượng và loại bớt những đoạn code bị trùng lặp
_ Tạo tính linh động cho đoạn việc tạo đối tượng
_ Tách biệt việc tạo đối tượng với logic chính của chương trình
Với những tính năng trên, việc sử dụng Factory Method Pattern một cách hợp lý sẽ giúp code của bạn trông sáng sủa hơn, tính linh động cao hơn. Nếu cần thêm 1 product, bạn chỉ việc tạo 1 class implement theo interface IProduct và chỉnh trong hàm FactoryMethod() của Creator factory class. Như vậy bạn hoàn toàn không phải sửa nhiều lần code chính của chương trình.
Ở hình dưới, Factory là class Creator và nó sẽ dùng hàm FactoryMethod() để quyết định tạo ra ProductA hay ProductB ở thời điểm runtime tùy thuộc vào input đầu vào hoặc 1 condition nào đó.


Abstract Factory Partern là gì:
Ngoài Factory Method, ta còn có 1 pattern khác là Abstract Factory Method. Abstract Factory cung cấp một giao diện lớp có chức năng tạo ra một tập hợp các đối tượng liên quan hoặc phụ thuộc lẫn nhau mà không chỉ ra đó là những lớp cụ thể nào tại thời điểm thiết kế. 

So sánh:
Về bản chất, Abstract Factory Pattern chỉ khác Factory Pattern ở chỗ nó không tạo chỉ 1 đối tượng mà tạo một tập hợp đối tượng liên quan hay dễ hiểu hơn là tạo ra một Factory con khácDưới đây là các so sánh:
Supper short comparison:
Factory pattern: The factory produces IProduct-implementations
Abstract Factory Pattern: A factory-factory produces IFactories, which in turn produces IProducts
Short comparison:
Factory method: You have a factory that creates objects that derive from a particular base class
Abstract factory: You have a factory that creates other factories, and these factories in turn create objects derived from base classes. You do this because you often don't just want to create a single object (as with Factory method) - rather, you want to create a collection of related objects.

So sánh càng ngắn thì càng dễ nhớ vì vậy chi tiết và implement về các pattern này mời các bạn tham khảo thêm ở Google.


Không có nhận xét nào:

Đăng nhận xét