Abstract Factory Pattern Là Gì

  -  
Khái niệm

Abstract factory là 1 trong những pattern giành riêng cho xây dựng phía đối tượng người sử dụng trong ứng dụng, nó cung cấp một một tờ bối cảnh gồm tính năng tạo ra những đối tượng tương quan nhưng mà không chỉ có ra các lớp cụ thể như thế nào ở thời gian thiết kế. Nó được xếp vào nhiều loại kiến thiết pattern creational kiến thiết.

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

*


Bối cảnh

Giả sử chúng ta tất cả một nhà máy sản xuất sản xuất thời trang và năng động với nhiều phân xưởng. Cái thì phú trách rưới phân phối giầy, cái thêm vào váy đầm, dòng thì chế tạo mũ,..Yêu cầu đề ra là chúng ta phải tạo thành nhà máy sản xuất làm thế nào để cho nó đáp ứng được phần nhiều những thay đổi nhu cầu người dùng cùng Thị phần, nlỗi mùa hè thì cấp dưỡng mẫu A, mùa đông lại cung cấp mẫu B cho từng sản phẩm giầy, váy đầm, áo quần...Với ĐK là chưa hẳn đầu tư chi tiêu thêm đồ đạc cùng nhân công xuất xắc bố trí lại máy bộ nhân sự vì khôn xiết tốn kỉm với mất quá nhiều thời hạn. Vấn đề này cũng tượng trường đoản cú nlỗi vấn đề thi công khối hệ thống phần mềm, làm việc bài viết này tôi mang sử phần mềm này là 1 trong xí nghiệp sản xuất cung cấp thời trang điều đó.

Với kinh nghiệm đặt ra điều này chúng ta phải một cách để tạo nên các dòng sản phẩm một phương pháp đơn lẻ. lấy ví dụ như mùa hè thì tất cả giầy mùa hè, đầm mùa hè với trời đông lại sở hữu giầy và váy của ngày đông.

Giải phápĐiều thứ nhất Abstract Factory pattern đề suất knhì báo một phương pháp rõ rằng interfaces cho từng nhiều loại hàng hóa đơn lẻ mang lại từng chiếc sản phẩm (Ví dụ: giãy, váy, áo, nón,...). Tiếp theo, bạn cần có tác dụng tất cả đổi mới thể của sản phẩm theo các interfaces. lấy ví dụ, toàn bộ những đổi mới thể của giày (shoe) đang implement Ishoe interface, những trở nên thể của váy đầm đã implement IDress interface,..Các chúng ta có thể hình dung nlỗi hình mặt dưới:

*

Tiếp cho chúng ta khai báo Abstract Factory, một interface với cùng 1 list những cách thức để tạo ra tất cả những sản phẩm thuộc cùng dòng product (loại tại chỗ này được gọi là những chủng loại ngày hè, mùa đông)

*

Bây tiếng, có tác dụng thay làm sao với các thay đổi thể hàng hóa ? Với từng một số loại vươn lên là thể của loại sản phẩm, bọn họ tạo thành một factory class bóc tách biệt dựa trên AbstractFactory interface. Một factory class là một trong những class mà lại trả về hàng hóa của một loại riêng lẻ. lấy ví dụ như SummerFashion sẽ chỉ tạo ra những đối tượng SummerShoe, SummerDress, vân vân..

Cấu trúc

*


Abstract Products: Knhì báo những interfaces cho những một số loại hiếm hoi dẫu vậy những hàng hóa bao gồm liên quan sẽ tạo nên thành một mẫu product.Concrete Products: Là các implement khác nhau của abstract product, được team lại vì những biến chuyển thể. Mỗi abstract product (Shoe, Dress) cần được implement vào toàn bộ những biến thể (Summer, Winter).

Xem thêm: Phân Biệt Sự Khác Nhau Giữa "Công An" Và " Cảnh Sát Là Gì, Cảnh Sát Là Gì

Abstract Factory: Interface khai báo một tập các cách thức mang đến câu hỏi chế tạo ra từng abstract productConcrete Factories: Implement các cách tiến hành tạo ra hàng hóa của abstract factory. Mỗi concrete factory bao gồm trách nhiệm mang đến một trở thành thể của hàng hóa và chỉ còn sinh sản những hàng hóa của biến thể này.Client: Mặc mặc dù concrete factories tạo thành concrete products, kiểu dáng trả về của các thủ tục sản xuất product bắt buộc trả về abstract products khớp ứng. Với bí quyết này client code thực hiện một factory không được kết phù hợp với một thay đổi thể của sản phẩm mà lại nó nhận về một factory. Client rất có thể thao tác cùng với bất kể concrete factory như thế nào (biến chuyển thể product), miễn là nó giao tiếp với objects của bọn chúng thông qua abstract interfaces.Ứng dụngSử dụng Abstract Factory lúc code của chúng ta đề xuất làm việc cùng với các thay đổi thể của những sản phẩm tương quan, mà lại không thích phụ thuộc vào concrete class của không ít product kia (Chúng hoàn toàn có thể ko được cho là trước hoặc đơn giản dễ dàng là bạn có nhu cầu không ngừng mở rộng trong tương lai).

Abstract Factory cung cấp cho chính mình một interface cho Việc sinh sản các objects từ bỏ mỗi class của mẫu sản phẩm. Miễn là code của công ty tạo thành objects trải qua interface này, bạn không phải lo ngại về vấn đề chế tạo ra không nên biến thể của hàng hóa (không nên ở chỗ này Có nghĩa là nó không hợp với bất kì sản phẩm như thế nào đã có tạo ra trong áp dụng của bạn).

Xem xét dùng Abtract Factory khi bạn gồm một class với cùng một tập những Factory Method.Trong một chương trình được thiết kế xuất sắc thì từng một class gồm trách nát nhiệm chỉ cho một việc. Khi một class giải quyết không ít phong cách products, nó nên tách bóc các factory method thành một factory class giỏi nói bí quyết khách là thực hiện Abstract FactoryƯu nhược điểmƯu điểm:quý khách hoàn toàn có thể bảo đảm an toàn rằng products mà chúng ta nhận từ factory tương hợp với những chiếc không giống.Quý Khách tránh khỏi vấn đề đính thêm chặt thân một concrete products cùng client code.Single Responsibility Principle. Quý Khách có thể bóc tách code sản xuất hàng hóa tới một chỗ, giúp code dễ dãi để hỗ trợOpen/Closed Principle. Dễ dàng nhằm thêm phát triển thành thể sản phẩm mới mà ko có tác dụng hình ảnh tác động đến code cũNhược điểm:Code rất có thể trnghỉ ngơi yêu cầu phức tạp rộng nấc cần thiết trường hợp như có tương đối nhiều interfaces và classes được sản xuất.Cách implementÁnh xạ một ma trận của các các loại product cùng các biến thể của các sản phẩm này.Khai báo abstract hàng hóa interfaces mang đến toàn bộ những các loại products. Tiếp theo tạo toàn bộ concrete product class để implement mọi interfaces này.Knhì báo abstract factory interface với cùng một tập các creation methods cho tất cả abstract products.Implement một tập những concrete factory classes, một class cho mỗi biến đổi thể product.Tạo code khởi sinh sản factory một ở đâu kia trong ứng dụng. Nó phải khởi sản xuất một trong số những concrete factory classes, dựa vào bên trên thông số kỹ thuật áp dụng hoặc môi trường xung quanh hiện tại. Truyền đối tượng người dùng factory này mang đến tất cả class vị trí mà tạo ra sản phẩm.Quết qua code cùng search tất cả vị trí call trực sau đó hàng hóa constructor. Txuất xắc chũm chúng cùng với creation method tương xứng mang đến đối tượng người tiêu dùng factory.

Xem thêm: Pat Là Gì - (Từ Điển Anh

Demo cùng với code C#

Tạo những sản phẩm Interfaces, trong đó với từng hàng hóa đều phải có 2 methods GetName() với GetModel()

public interface IDress string GetName(); string GetModel();public interface IShoe string GetName(); string GetModel();Tạo Abtract Factory class, trong những số ấy các method nhằm tạo thành những cái product không giống nhau

public interface IFashion IShoe CreateShoe(); IDress CreateDress();Tạo ra các trở thành thể của Product (concrete product) implement hàng hóa interface:

public class SummerDress: IDress public string GetName() return "Summber dress"; public string GetModel() return "This is summer dress"; public class SummerShoe: IShoe public string GetName() return "Summer shoe"; public string GetModel() return "This is summer shoe"; public class WinterDress: IDress public string GetName() return "Winter dress"; public string GetModel() return "This is winter dress"; public class WinterShoe: IShoe public string GetName() return "Winter shoe"; public string GetModel() return "This is winter shoe"; Tạo phát triển thành thể của từng mẫu product:

public class SummerFashion: IFashion public IShoe CreateShoe() return new SummerShoe(); public IDress CreateDress() return new SummerDress(); public class WinterFashion: IFashion public IShoe CreateShoe() return new WinterShoe(); public IDress CreateDress() return new WinterDress(); Implemnt client code:

public class Client public void ClientMethod(IFashion factory) var shoe = factory.CreateShoe(); var dress = factory.CreateDress(); Console.WriteLine(shoe.GetModel()); Console.WriteLine(shoe.GetName()); Console.WriteLine(dress.GetModel()); Console.WriteLine(dress.GetName()); Console.WriteLine("**********"); Thực thi sống lịch trình main:

class Program static void Main(string<> args) Console.WriteLine("Abstract factory demo:"); Console.WriteLine("**********"); var client = new Client(); client.ClientMethod(new SummerFashion()); client.ClientMethod(new WinterFashion()); Kết quả chạy chương trình:

*

Link code test đầy đủ: https://github.com/quanghiepth86/abstract-factory-csharp-demo

Thảo luận

Bài viết này tôi sẽ reviews nắm lược cơ bản về Abtract Factory pattern, các ưu điểm yếu với phương pháp áp dụng nó. Tôi nghĩ rằng đó là một pattern được áp dụng tương đối rộng thoải mái mang lại hồ hết áp dụng phía đối tượng người sử dụng. Hy vọng nội dung bài viết để giúp đỡ ích mang lại chúng ta Lúc vận dụng vào thực tế. Cảm ơn chúng ta đang theo dõi bài viết.