ABSTRACT FACTORY PATTERN LÀ GÌ

     

Pattern vật dụng hai mà mình thích giới thiệu đó là Abstract Factory. Nó rất có thể được hình dung như một xí nghiệp lớn, phía bên trong có những nhà máy nhỏ tuổi hơn tiếp tế ra phần đông loạt thành phầm liên quan cho nhau.

Bạn đang xem: Abstract factory pattern là gì

Hãy rước một đơn vị phân phối ô tô làm ví dụ, ví dụ điển hình Hyundai. Họ gồm nhà máy, hoặc xưởng, chế tạo bánh xe: bánh của Azera, bánh của Sonata, bánh của Veloster, v.v… Đến lượt cửa xe, cũng đều có nhà máy sản xuất cửa Azera, cửa Sonata, cửa Veloster. Thân xe, rượu cồn cơ, đèn, và các thành phần khác bao hàm nhà máy chế tạo chúng.


*
*
*
*

Bạn cũng cần kiểm tra các tiêu chuẩn dưới đây.

Hãy chú ý liệu việc chủ quyền với các “nền tảng” và câu hỏi khởi sản xuất các đối tượng người dùng có cần là sự việc của khối hệ thống hiện tại tốt không.Làm rõ đâu là “nền tảng”, đâu là “sản phẩm”, và mối quan hệ giữa chúng.Định nghĩa một factory (interface) với rất đầy đủ các cách thức khởi chế tạo từng sản phẩm.Định nghĩa các lớp dẫn xuất của interface trên, đảm bảo đã “bao gói” các phương thức khởi tạo thành (ứng với vấn đề gọi new).Client không được dùng new mà nên dùng những phương thức mà chúng ta đã khai báo sống interface.

Code ví dụ

Dưới đấy là code lấy một ví dụ về bài toán khởi tạo các loại CPU, MMU, viết bằng ngôn từ Java.

Các “sản phẩm” (CPU, MMU)

// class CPUabstract class CPU // class EmberCPUclass EmberCPU extends CPU // class EnginolaCPUclass EnginolaCPU extends CPU // class MMUabstract class MMU // class EmberMMUclass EmberMMU extends MMU // class EnginolaMMUclass EnginolaMMU extends MMU Các “nền tảng” vậy thể// class EmberFactoryclass EmberToolkit extends AbstractFactory
Override
public MMU createMMU() return new EmberMMU(); // class EnginolaFactoryclass EnginolaToolkit extends AbstractFactory
Override
public MMU createMMU() return new EnginolaMMU(); “Nền tảng” trừu tượngenum Architecture ENGINOLA, EMBERabstract class AbstractFactory private static final EmberToolkit EMBER_TOOLKIT = new EmberToolkit(); private static final EnginolaToolkit ENGINOLA_TOOLKIT = new EnginolaToolkit(); // Returns a concrete factory object that is an instance of the // concrete factory class appropriate for the given architecture. static AbstractFactory getFactory(Architecture architecture) AbstractFactory factory = null; switch (architecture) case ENGINOLA: factory = ENGINOLA_TOOLKIT; break; case EMBER: factory = EMBER_TOOLKIT; break; return factory; public abstract CPU createCPU(); public abstract MMU createMMU();Clientpublic class Client public static void main(String<> args) AbstractFactory factory = AbstractFactory.getFactory(Architecture.EMBER); CPU cpu = factory.createCPU();

Lưu ý

Creational patterns có thể kết phù hợp với nhau hoặc thay thế cho nhau. Và để quyết định dùng pattern như thế nào hoặc kết hợp như thế nào, các bạn phải lưu ý trường đúng theo của mình.

Xem thêm: Phẫu Thuật Thay Van Tim Sống Được Bao Lâu, Khi Nào Phải Thay Van Tim

Abstract Factory thường xuyên được phối hợp với Factory Method, đôi khi là cả Protoype nữa.

Abstract Factory có thể thay nạm cho Facade để bịt giấu rất nhiều lớp được quánh tả riêng mang đến từng “nền tảng”.

Phân biệt Abstract Factory và Builder. Trong những lúc Abstract Factory chú trọng vấn đề khởi chế tạo ra những nhóm đối tượng có tương quan đến nhau (chiều ngang); thì Builder chú ý vào việc tạo nên một đối tượng người dùng qua nhiều bước nối tiếp nhau, giống hệt như một dây chuyền vậy (chiều dọc). Trường thích hợp của Abstract Factory, đối tượng người tiêu dùng được trả về ngay; còn trong trường thích hợp của Builder, đối tượng là hiệu quả của cả quá trình.

Thông thường, câu hỏi thiết kế hệ thống sẽ đi từ Factory Method (dễ hiểu, dễ tuỳ biến) thành Abstract Factory, Prototype, hoặc Builder (mềm dẻo hơn, phức hợp hơn) nếu như như người xây đắp cảm thấy tính mềm mỏng là nên thiết.

Vài lời bình luận

Như đang nói làm việc trên, những creational pattern rất có thể thay thế lẫn nhau hoặc kết hợp với nhau tuỳ hoàn cảnh, và vấn đề thiết kế hoàn toàn có thể đi trường đoản cú Factory Method mang đến Abstract Factory. Tức là bạn buộc phải xem xét thật kỹ lưỡng bài toán của mình để biết buộc phải lựa chọn chiến thuật nào, thay bởi vội kim cương lựa chọn.

Xem thêm: Cách Chữa Đau Bụng Đi Ngoài Tại Nhà, 8 Chiêu Thức Trị Tiêu Chảy Tại Nhà Cực Đơn Giản

Các pattern được gửi ra ví dụ là mang đến cái lợi lớn cho những lập trình viên nhưng các bạn không nên chịu ràng buộc vào chúng. Theo tôi, đừng bao giờ nên giả định rằng: “Chắc tương lai hệ thống sẽ bắt buộc thế này, rứa kia” giỏi “Có lẽ sau này khối hệ thống cần yêu cầu mềm dẻo hơn, flexible hơn yêu cầu phải chọn Abstract Factory”. Code không nhiều hơn lúc nào cũng xuất sắc hơn.