Trong nội dung bài romanhords.comết trước, họ đã cùng nhau tò mò về một số loại design pattern trước tiên mang tên Factory Method Pattern. Trong nội dung bài romanhords.comết này, họ hãy thuộc nhau khám phá về một người đồng đội khác của Factory Method Pattern mang tên ‘Abstract Factory Pattern’ nhé!


Abstract Factory Pattern là gì nỗ lực nhỉ?

Tương trường đoản cú như Factory Method Pattern, Abstract Factory Pattern cũng là 1 design pattern thuộc nhóm khởi sinh sản (creational patterns) mặc dù nó cao cấp hơn Factory Method Pattern ở phần nó có thể chấp nhận được tạo ra một super factory dùng làm tạo ra các factory khác.

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

Để dễ tưởng tượng hơn, hãy tưởng tượng Abstract Factory như là 1 nhà trang bị lớn chứa nhiều nhà thứ nhỏ, trong số nhà máy đó bao gồm xưởng sản xuất, các xưởng đó tạo nên những thành phầm khác nhau.

Tìm phát âm về Abstract Factory Pattern và các ứng dụng?
*
Abstract Factory

Vấn đề đặt ra

Giả sử các bạn đang cải tiến và phát triển một ứng dụng giao hàng cho siêu thị kinh doanh đồ dùng nội thất của bản thân mang thương hiệu FurnitureShopApp. Code hiện tại tại của người sử dụng đang gồm 1 số class thay mặt đại diện cho:

Nhóm các sản phẩm đi kèm theo với nhau, ví dụ: Chair + Sofa + CoffeeTableLoại trở nên thể không giống nhau của mỗi nhóm sản phẩm. Ví dụ, thuộc nhóm sản phẩm Chair + Sofa + CoffeeTable nhưng mà lại có tương đối nhiều loại vươn lên là thể không giống nhau, như: Modern, romanhords.comctorian, ArtDeco.

*

Tuy nhiên trong thời gian gần đây bạn tiếp tục nhận được những ý kiến không mấy tích cực từ phía khách hàng. Tại sao là vì chưng những sản phẩm mà họ nhận được sau khoản thời gian đặt thiết lập đều không còn ăn khớp và tương hợp với nhau.

*
Ghế sofa kiểu tiến bộ không hề ăn nhập và tương thích với ghế bành hình dạng romanhords.comctoria

Là bạn trực tiếp trở nên tân tiến ứng dụng, bạn không thể bình chân như vại trước tình hình không mấy lành mạnh và tích cực hiện tại. Bạn muốn tìm ra giải pháp nào kia để rất có thể tạo ra các sản phẩm nội thất riêng lẻ mà vẫn bảo đảm rằng chúng đồng bộ với các món đồ nội thất còn sót lại trong thuộc nhóm sản phẩm tương ứng. Kế bên ra, vị các đối tác cung cấp đồ thiết kế bên trong của siêu thị đều update danh mục các thành phầm của họ rất tiếp tục nên bạn cũng muốn tìm ra biện pháp nào đó để có thể hạn chế về tối thiểu câu hỏi phải liên tiếp quay lại đổi khác các đoạn code cốt lõi mỗi khi những lần update danh mục này xảy ra.

Giải pháp

Rất may, Abstract Factory Pattern đó là chiếc phao hoàn toàn có thể giải nguy cho chính mình trong trường hợp này. Điều đầu tiên mà Abstract Factory Pattern đề xuất chính là romanhords.comệc khai báo từng interface mang đến từng sản phẩm riêng lẻ trong một nhóm thành phầm (ví dụ: Chair, Sofa, CoffeeTable,…). Sau đó, từng loại phát triển thành thể của từng sản phẩm riêng biệt sẽ phải thực hiện implements interface đó. Ví dụ, tất cả các loại đổi mới thể của Chair phải triển khai implements interface Chair, tất cả các loại biến hóa thể của Sofa phải triển khai implements interface Sofa,…

*

Tiếp theo chúng ta cần khai báo một Abstract Factory – một interface bao gồm các factory method đến từng sản phẩm riêng lẻ trong một nhóm sản phẩm (ví dụ: createdChair, createdSofa cùng createdCoffeeTable,…). Mỗi factory method này vẫn trả về kiểu tài liệu ứng với một số loại interface đã làm được khai báo của chính nó (ví dụ: Chair, Sofa, CoffeeTable,…)

Vậy còn team các thành phầm ứng với từng loại đổi mới thể thì sao? họ sẽ tạo nên các factory riêng biệt dựa trên interface AbstractFactory đã làm được khai báo, mỗi factory này đang lần lượt implement những factory method của AbstractFactory interface cùng trả về toàn bộ các thành phầm của một nhóm cụ thể, ví dụ: ModernFactory chỉ rất có thể tạo các đối tượng người sử dụng ModernChair, ModernSofa với ModernCoffeeTable.

Với thiết đặt như trên, giờ đây khi đề xuất nhóm thành phầm thuộc loại biến hóa thể nào đó, phía khách hàng hàng chỉ romanhords.comệc chỉ ra factory khớp ứng là đã có thể nhận được đúng các sản phẩm đảm bảo an toàn ăn khớp và tương xứng với nhau. Thật tuyệt đúng không nhỉ nào.

Cấu trúc của Abstract Factory Pattern

Abstract Factory Pattern bao gồm năm thành phần cơ bạn dạng là: Abstract Factory, Concrete Factory, Abstract Product, Concrete Product cùng Client.

*

Trong đó:

AbstractFactory: Khai báo dạng interface hoặc abstract class chứa những phương thức để tạo thành các đối tượng người tiêu dùng abstract.ConcreteFactory: Xây dựng, setup các cách làm tạo các đối tượng người dùng cụ thể.AbstractProduct: Khai báo dạng interface hoặc abstract class nhằm định nghĩa đối tượng người tiêu dùng abstract.ConcreteProduct: thiết đặt của các đối tượng người tiêu dùng cụ thể, setup các phương thức được lý lẽ tại AbstractProduct.Client: là đối tượng người sử dụng sử dụng AbstractFactory và các AbstractProduct.

Giải quyết vụ romanhords.comệc đã để ra

Nói định hướng vậy là đủ rồi, cùng thử vận dụng Abstract Factory Pattern để giải quyết và xử lý vấn đề đã đề ra nhé.

Đầu tiên bọn họ sẽ tạo ra 3 interface khớp ứng với 3 sản phẩm khác nhau là Chair, Sofa CoffeeTable.

Sau lúc tạo hoàn thành các interface trên, họ tiến hành tạo nên các class ứng với từng loại trở nên thể của từng sản phẩm, từng class này sẽ nên implements interface tương ứng của nó.

Tiếp theo, chúng ta sẽ tiến hành tạo nên FurnitureFactory – một interface bao gồm các factory method cho từng sản phẩm đơn lẻ trong một đội nhóm sản phẩm. Từng factory method này đang trả về kiểu tài liệu ứng với một số loại interface đã có được khai báo của nó.

Tiếp đến, bọn họ tiến hành tạo nên nhóm các thành phầm ứng với từng loại trở thành thể bằng cách tạo ra các factory lẻ tẻ dựa trên interface AbstractFactory đã có được khai báo, mỗi factory này vẫn lần lượt override những factory method của AbstractFactory interface và trả về tất cả các sản phẩm của một đội cụ thể.

Vậy là phần thiết lập đã xong, cùng thử nghiệm xem hiệu quả như cố nào nhé!

function clientCode(FurnitureFactory $factory) $chair = $factory->createChair(); $sofa = $factory->createSofa(); $coffeeTable = $factory->createCoffeeTable(); echo $chair->hasLegs() . " "; echo $chair->sitOn() . " "; echo $sofa->hasLegs() . " "; echo $sofa->sitOn() . " "; echo $coffeeTable->hasLegs() . " "; echo $coffeeTable->sitOn() . " "; echo "* romanhords.comctorian Furniture Factory "; clientCode(new romanhords.comctorianFurnitureFactory()); echo " "; echo "* Art Deco Factory "; clientCode(new ArtDecoFactory()); echo " "; echo "* Modern Factory "; clientCode(new ModernFactory());Kết trái thu được:

* romanhords.comctorian Furniture Factoryromanhords.comctorian Chair has four long legs.Sit on romanhords.comctorian Chair.romanhords.comctorian Sofa has four long legs.Sit on romanhords.comctorian Sofa.romanhords.comctorian Coffee Table has four long legs.Put something on romanhords.comctorian Coffee Table.* Art Deco FactoryArt Deco Chair has four short legs.Sit on Art Deco Chair.Art Deco Sofa has four short legs.Sit on Art Deco Sofa.Art Deco Coffee Table has only one leg.Put something on Art Deco Table.* Modern FactoryModern Chair has no legs.Sit on Modern Chair.Modern Sofa has no legs.Sit on Modern Sofa.Modern Coffee Table has four short legs.Put something on Modern Coffee Table.Như vậy, bạn cũng có thể thấy rằng bây giờ khi cần nhóm thành phầm thuộc loại đổi mới thể làm sao đó, phía khách hàng hàng chỉ cần chỉ ra factory khớp ứng là đã rất có thể nhận được đúng các sản phẩm bảo đảm ăn khớp và tương xứng với nhau.

Ưu và nhược điểm của Abstract Factory Pattern

Ưu điểm

Abstract Factory Pattern giúp bảo vệ rằng các product mà bạn nhận được từ 1 factory gần như tương đam mê với nhauAbstract Factory Pattern giúp hạn chế sự phụ thuộc giữa creator cùng concrete products.Abstract Factory Pattern góp gom những đoạn code tạo nên product vào trong 1 nơi trong chương trình, nhờ đó giúp dễ theo dõi với thao tác.Với Abstract Factory Pattern, bạn có thể thoải mái thêm nhiều một số loại product mới vào công tác mà ko làm chuyển đổi các đoạn code căn cơ đã bao gồm trước đó.

Nhược điểm

Code có thể trở nên nhiều hơn thế nữa và phức hợp hơn do đòi hỏi phải áp dụng nhiều class mới gồm thể cài đặt được pattern này.

Xem thêm: Nghĩa Của Từ Twig Là Gì Mô Tả Twig Đọc Là Gì, Twig Là Gì

Kết luận

Trong nội dung bài romanhords.comết này, bọn họ đã cùng nhau tìm hiểu về Abstract Factory Pattern, hi vọng pattern này sẽ giúp ích cho các bạn trong tương lai. Trong nội dung bài romanhords.comết tiếp theo của series, mình đã tiếp tục giới thiệu cho các bạn một thiết kế pattern bắt đầu toanh thuộc đội khởi chế tác mang thương hiệu ‘Builder’. Các bạn nhớ đón xem nhé.