ABSTRACT FACTORY PATTERN LÀ GÌ

  -  

Pattern thứ nhì mà mình thích ra mắt đó là Abstract Factory. Nó hoàn toàn có thể được tưởng tượng như một nhà máy sản xuất béo, bên trong tất cả những nhà máy bé dại rộng chế tạo ra các loạt sản phẩm liên quan đến nhau.

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

Hãy rước một nhà phân phối xe hơi có tác dụng ví dụ, ví dụ điển hình Hyundẻo. Họ tất cả nhà máy, hoặc xưởng, sản xuất 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 pháo, cũng đều có xí nghiệp sản xuất chế tạo cửa ngõ Azera, cửa ngõ Sonata, cửa Veloster. Thân xe, bộ động cơ, đèn, cùng những yếu tắc không giống bao gồm xí nghiệp chế tạo chúng.

Vậy bắt buộc tổ chức triển khai việc thêm vào ấy như thế nào? Cùng quan sát và theo dõi tiếp nhé!

Nếu new làm cho quen với Design Pattern, có thể bạn sẽ muốn đọc bài bác tổng quan lại của bản thân tại phía trên hoặc bài xích về Singleton trên đây.


ABSTRACT FACTORY


Giống như nghỉ ngơi bài bác trước về Singleton, bài bác này tất cả 5 phần:

Ý tưởng chínhVấn đề yêu cầu giải quyếtCấu trúcCode ví dụLưu ýVài lời bình luận

Ý tưởng chính

Khai báo một interface với những cách tiến hành chế tạo ra các đối tượng abstract.Một khối hệ thống phân cấp với những “chiếc xe” cùng những “thành phần xe”.Tránh thực hiện keyword new.

Vấn đề đề xuất giải quyết

lúc bạn có nhu cầu phần mềm của bản thân có thể được thực thi trên các gốc rễ không giống nhau, bạn buộc phải kiếm tìm cách xử trí vấn đề khởi chế tác những đối tượng người tiêu dùng bên trên các nền tảng gốc rễ đó. “Nền tảng” tại chỗ này có thể đọc là hệ điều hành quản lý, cửa hàng dữ liệu,… Trong ví dụ tại phần bắt đầu, Azera, Sonata cùng Veloster chính là những căn cơ.

Tuy nhiên, nếu như bạn cách xử trí chuyện này bằng gần như câu if ... else thì chẳng mấy chốc code của các bạn sẽ thành một mớ bòng bong vì chưng phần mềm sẽ dần nngơi nghỉ lớn. Và chính là nguyên nhân mà Abstract Factory Ra đời.

Cấu trúc

Ta cần có năm nguyên tố, đó là:

Abstract Platform: interface hoặc abstract class với các thủ tục tạo nên các “sản phẩm”Concrete Platforms: Knhì báo rõ ràng những “nền tảng” (PlatformOne, PlatformTwo trong hình)Abstract Products: interface hoặc abstract class có mang những một số loại “sản phẩm” (AbstractProductOne, AbstractProductTwo trong hình)Concrete Products: Knhị báo rõ ràng các “sản phẩm” (ProductOnePlatformOne, ProductOnePlatformTwo, ProductTwoPlatformOne, ProductTwoPlatformTwo trong hình)Client: Đối tượng áp dụng Abstract Platsize và Abstract Product
*
*
*

quý khách hàng cũng cần soát sổ các tiêu chuẩn sau đây.

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

Xem thêm: Những Hình Ảnh Đẹp Ở Đà Lạt, Top 20 Địa Điểm Du Lịch Đà Lạt Đẹp Nhất Năm 2021

Code ví dụ

Dưới đây là code ví dụ về việc khởi chế tạo những một số loại CPU, MMU, viết bởi 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” nạm 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 rất có thể kết phù hợp với nhau hoặc thay thế sửa chữa lẫn nhau. Và nhằm quyết định sử dụng pattern làm sao hoặc phối hợp như thế nào, bạn cần để ý trường phù hợp của chính mình.

Abstract Factory thường xuyên được phối kết hợp với Factory Method, nhiều lúc là cả Protoype nữa.

Abstract Factory rất có thể thay thế sửa chữa cho Facade để bít giấu những lớp được sệt tả riêng mang lại từng “nền tảng”.

Phân biệt Abstract Factory với Builder. Trong Khi Abstract Factory chú trọng câu hỏi khởi chế tác những nhóm đối tượng bao gồm tương quan đến nhau (chiều ngang); thì Builder chú trọng vào câu hỏi tạo thành một đối tượng qua những bước tiếp nối nhau, giống hệt như một dây chuyền sản xuất vậy (chiều dọc). Trường hòa hợp của Abstract Factory, đối tượng được trả về ngay; còn vào ngôi trường đúng theo của Builder, đối tượng người tiêu dùng là tác dụng của cả quy trình.

Đôi khi, việc thi công khối hệ thống đã đi từ Factory Method (dễ nắm bắt, dễ dàng tuỳ biến) thành Abstract Factory, Prototype, hoặc Builder (mềm dẻo hơn, tinh vi hơn) trường hợp như bạn thiết kế cảm thấy tính mềm mỏng là quan trọng.

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

Như vẫn nói ở trên, các creational pattern rất có thể sửa chữa thay thế lẫn nhau hoặc kết phù hợp với nhau tuỳ yếu tố hoàn cảnh, và việc thiết kế hoàn toàn có thể đi từ Factory Method mang đến Abstract Factory. Tức là bạn phải chăm chú thiệt kỹ càng bài bác toán của bản thân để biết đề nghị gạn lọc giải pháp nào, vậy do nhanh lẹ chọn lọc.

Xem thêm: Vé Máy Bay Phú Quốc Sài Gòn Giá Vé Máy Bay Phú Quốc Sài Gòn Giá Rẻ Chỉ Từ 299

Các pattern được chỉ dẫn cụ thể là đem lại mẫu lợi mập cho những lập trình sẵn viên tuy vậy chúng ta không nên chịu ảnh hưởng vào chúng. Theo tôi, chớ bao giờ phải trả định rằng: “Chắc tương lai hệ thống sẽ cần thay này, thế kia” hay “Có lẽ sau này khối hệ thống rất cần được mềm mỏng rộng, flexible rộng phải cần lựa chọn Abstract Factory”. Code thấp hơn lúc nào cũng tốt rộng.