Abstract factory pattern là gì

  -  

Trước tiên, họ hãy cùng nhacaiaz.com ra mắt phần lớn thứ về Abstract Factory Pattern và phần code ví dụ cụ thể nhằm mục đích giúp ace dễ nắm bắt Lúc vận dụng bên trên những ngôn từ không giống nhau. Ace hoàn toàn có thể tìm hiểu thêm những bài xích không giống trên series Design Pattern trên đây.

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


1. Giới thiệu

Abstract Factory Factory Pattern là một trong những trong số những Creational pattern. Mô hình abstract factory tương tự với Factory Pattern được coi là một Abstract Factory patterns. Các Abstract Factory patterns chuyển động bao quanh một siêu nhà máy tạo ra các xí nghiệp khác.

Triển khai Abstract factory pattern cung ứng mang đến chúng ta một kích thước có thể chấp nhận được bọn họ tạo thành những đối tượng tuân theo một pattern chung. Vì vậy, trong thời hạn chạy, abstract factory được kết hợp với bất kỳ factory rõ ràng mong muốn nào hoàn toàn có thể tạo ra những đối tượng người tiêu dùng trực thuộc loại ước muốn.

Hãy coi trình diễn GOF của pattern


*

Abstract Factory Design Pattern: ví dụ như về biểu đồ dùng lớp UML cho Abstract Factory Design Pattern.

AbstractFactory : Knhị báo một hình ảnh cho các chuyển động chế tác các đối tượng thành phầm trừu tượng.ConcreteFactory : Thực hiện tại những chuyển động được knhì báo vào AbstractFactory để chế tạo các đối tượng người tiêu dùng sản phẩm cụ thể.Sản phẩm(Product): Xác định một đối tượng người sử dụng sản phẩm sẽ tiến hành tạo nên vị xí nghiệp bê tông khớp ứng với thực hiện đồ họa AbstractProduct.Máy khách(Client): Chỉ thực hiện các hình ảnh được knhị báo bởi những lớp AbstractFactory cùng AbstractProduct.

Abstract Factory hỗ trợ những giao diện để tạo ra chúng ta các đối tượng người tiêu dùng liên quan hoặc phụ thuộc vào nhưng mà không những định những lớp cụ thể của bọn chúng.

Phần mềm vật dụng khách(Client) tạo thành một thực hiện rõ ràng của abstract factory cùng tiếp đến sử dụng những bối cảnh thông thường để tạo thành những đối tượng rõ ràng là một phần của họ đối tượng người tiêu dùng.

Khách hàng(Client) phân vân hoặc ko quyên tâm mang đến đồ dùng thể rõ ràng làm sao mà họ nhận thấy trường đoản cú từng xí nghiệp cụ thể này bởi vì họ chỉ thực hiện các giao diện bình thường của thành phầm của họ.

Xem thêm: Đỉnh Cao Của Độ Xe Zin Là Xe Gì, Ô Tô Cũ Còn Zin Là Gì

Vì vậy, cùng với ý tưởng về mẫu mã Abstract Factory này, hiện thời chúng ta sẽ nỗ lực tạo nên một xây cất sẽ tạo nên ĐK thuận tiện mang đến bài toán tạo nên những đối tượng tương quan.


2. Thực hiện

Hãy rước một ví dụ, Giả sử chúng ta mong tạo ra một xí nghiệp sản xuất cung cấp xe hơi thế giới. Nếu chính là mẫu thiết kế nhà máy , thì nó tương xứng với một vị trí độc nhất vô nhị. Nhưng so với pattern này, họ phải nhiều địa chỉ với một vài thay đổi kiến tạo đặc biệt.

Chúng ta đề xuất những xí nghiệp sản xuất tiếp tế ô tô nghỉ ngơi từng vị trí nlỗi IndiaCarFactory, USACarFactory cùng DefaultCarFactory. Bây giờ, vận dụng của bọn họ buộc phải đủ hoàn hảo để xác định vị trí khu vực ứng dụng đang rất được thực hiện, bởi vậy bọn họ đang rất có thể sử dụng nhà máy phân phối ô tô cân xứng cơ mà ko nên biết Việc xúc tiến nhà máy sản xuất ô tô nào sẽ tiến hành sử dụng trong nội cỗ. Điều này cũng giúp họ tránh bị ai đó Call nhầm nhà máy cho 1 địa điểm cụ thể.

Tại phía trên họ nên một lớp trừu tượng khác đã xác xác định trí và áp dụng nội bộ vấn đề thực hiện đúng đắn nhà máy cung ứng ô tô cơ mà ko đưa ra một nhắc nhở làm sao cho những người dùng. Đây đúng là sự việc mà lại mô hình abstract factory được sử dụng nhằm giải quyết.

// Java Program to lớn demonstrate the // working of Abstract Factory Pattern enum CarType MICRO, MINI, LUXURY abstract class Car Car(CarType Model, Location location) this.model = model; this.location = location; abstract void construct(); CarType Model = null; Location location = null; CarType getModel() return model; void setModel(CarType model) this.Model = model; Location getLocation() return location; void setLocation(Location location) this.location = location;
Override public String toString() return "CarModel - "+Model + " located in "+location; class LuxuryCar extends Car LuxuryCar(Location location) super(CarType.LUXURY, location); construct();
Override protected void construct() System.out.println("Connecting lớn luxury car"); class MicroCar extends Car MicroCar(Location location) super(CarType.MICRO, location); construct();
Override protected void construct() System.out.println("Connecting to lớn Micro Car "); class MiniCar extends Car MiniCar(Location location) super(CarType.MINI,location ); construct();
Override void construct() System.out.println("Connecting to Mini car"); enum Location DEFAULT, USA, INDIA class INDIACarFactory static Car buildCar(CarType model) Car oto = null; switch (model) case MICRO: oto = new MicroCar(Location.INDIA); break; case MINI: oto = new MiniCar(Location.INDIA); break; case LUXURY: car = new LuxuryCar(Location.INDIA); break; default: break; return car; class DefaultCarFactory public static Car buildCar(CarType model) Car oto = null; switch (model) case MICRO: car = new MicroCar(Location.DEFAULT); break; case MINI: oto = new MiniCar(Location.DEFAULT); break; case LUXURY: car = new LuxuryCar(Location.DEFAULT); break; default: break; return car; class USACarFactory public static Car buildCar(CarType model) Car oto = null; switch (model) case MICRO: car = new MicroCar(Location.USA); break; case MINI: car = new MiniCar(Location.USA); break; case LUXURY: oto = new LuxuryCar(Location.USA); break; default: break; return car; class CarFactory private CarFactory() public static Car buildCar(CarType type) Car oto = null; // We can add any GPS Function here which // read location property somewhere from configuration // & use location specific car factory // Currently I"m just using INDIA as Location Location location = Location.INDIA; switch(location) case USA: oto = USACarFactory.buildCar(type); break; case INDIA: oto = INDIACarFactory.buildCar(type); break; default: car = DefaultCarFactory.buildCar(type); return car; class AbstractDesign public static void main(String<> args) System.out.println(CarFactory.buildCar(CarType.MICRO)); System.out.println(CarFactory.buildCar(CarType.MINI)); System.out.println(CarFactory.buildCar(CarType.LUXURY)); Đầu ra:

Connecting to Micro Car CarModel - MICRO located in INDIAConnecting lớn Mini carCarModel - MINI located in INDIAConnecting khổng lồ luxury carCarModel - LUXURY located in INDIA3. Sự khác biệtSự khác biệt chính giữa “factory method” với “abstract factory” là factory method là 1 trong những thủ tục nhất và abstract factory là một trong những đối tượng người sử dụng.factory method chỉ là 1 cách tiến hành, nó có thể được ghi đnai lưng vào một lớp nhỏ, trong lúc abstract factory là 1 đối tượng có tương đối nhiều factory method trong số ấy.Factory Method Pattern thực hiện tính kế thừa cùng phụ thuộc một tấm bé để xử trí bài toán khởi sản xuất đối tượng mong muốn.4. Ưu điểmMẫu này đặc biệt quan trọng hữu ích Khi quý khách hàng chần chờ đúng mực loại yêu cầu tạo ra.

Cách ly những lớp cố gắng thể: Mẫu Abstract Factory khiến cho bạn kiểm soát các lớp đối tượng người dùng mà ứng dụng tạo nên. Bởi bởi vì một nhà máy sản xuất đóng gói trách rưới nhiệm và quy trình tạo thành các đối tượng sản phẩm, nó vẫn phương pháp ly những thứ khách hàng khỏi những lớp tiến hành. Khách sản phẩm thao tác làm việc những phiên phiên bản trải qua các đồ họa trừu tượng của họ. Tên lớp thành phầm được cách ly vào quy trình thực hiện ở trong phòng sản phẩm công nghệ rứa thể; chúng không xuất hiện trong code quý khách.Trao thay đổi các họ Sản phđộ ẩm một biện pháp dễ dàng dàng: Loại xí nghiệp sản xuất cụ thể chỉ xuất hiện thêm một đợt vào một áp dụng, chính là chỗ nó được khởi sản xuất. Như vậy giúp dễ ợt chuyển đổi xí nghiệp sản xuất cụ thể mà lại vận dụng áp dụng. Nó có thể áp dụng các cấu hình thành phầm khác biệt chỉ dễ dàng và đơn giản bằng cách thay đổi nhà máy sản xuất cụ thể. Bởi vày một abstract factory tạo ra một bọn họ sản phẩm hoàn hảo, toàn cục bọn họ sản phẩm chuyển đổi và một thời gian.Thúc đẩy tính nhất quán giữa các sản phẩm: Lúc những đối tượng người sử dụng sản phẩm trong một gia đình được thiết kế với nhằm vận động bên nhau, điều quan trọng là ứng dụng chỉ sử dụng những đối tượng từ một mái ấm gia đình tại 1 thời điểm. AbstractFactory tạo cho điều này thuận lợi triển khai.n.5. Nhược điểmKhó cung ứng những nhiều loại sản phẩm mới: Việc không ngừng mở rộng những abstract factory để chế tạo các nhiều loại Sản phđộ ẩm mới không hẳn là điều tiện lợi. Đó là bởi vì bối cảnh AbstractFactory sửa chữa thay thế tập hợp những sản phẩm rất có thể được tạo ra. Việc cung ứng các các loại sản phẩm mới toanh yên cầu cần mở rộng factory interface, liên quan đến sự việc biến hóa lớp AbstractFactory và tất cả các lớp con của chính nó.

LƯU Ý: Phần như thế nào ví dụ trên cũng dựa trên Cách hoạt động vui chơi của những Cabs nlỗi uber và ola trên quy mô béo.

Xem thêm: Cách Copy Văn Bản Vào Usb Đơn Giản, Database Error

Cài áp dụng nhacaiaz.com để tiện lợi cập nhật tin cùng học xây dựng phần nhiều lúc hầu hết chỗ trên đây.

Tài liệu từ nhacaiaz.com:

Nếu các bạn thấy tuyệt với có lợi, bạn có thể tđắm đuối gia những kênh sau của nhacaiaz.com nhằm thừa nhận được không ít rộng nữa: