Abstract factory pattern là gì

      35

Trước tiên, bọn họ hãy thuộc ttmn.mobi giới thiệu mọi vật dụng về Abstract Factory Pattern cùng phần code ví dụ cụ thể nhằm góp ace dễ hiểu khi áp dụng trên các ngôn ngữ khác nhau. Ace bao gồm thể tìm hiểu thêm các bài khác trên series kiến thiết Pattern trên đây.

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


1. Giới thiệu

Abstract Factory Factory Pattern là trong những Creational pattern. Quy mô abstract factory gần giống với Factory Pattern được xem là một Abstract Factory patterns. Những Abstract Factory patterns hoạt động xung xung quanh một khôn xiết nhà máy tạo thành các xí nghiệp sản xuất khác.

Triển khai Abstract factory pattern cung cấp cho bọn họ một khuôn khổ đến phép bọn họ tạo các đối tượng người dùng tuân theo một pattern chung. Bởi vậy, trong thời hạn chạy, abstract factory được kết hợp với bất kỳ factory cụ thể mong ao ước nào rất có thể tạo ra các đối tượng người tiêu dùng thuộc loại mong muốn muốn.

Hãy xem màn trình diễn GOF của pattern


*

Abstract Factory design Pattern: ví dụ như về biểu đồ gia dụng lớp UML đến Abstract Factory design Pattern.

AbstractFactory : Khai báo một hình ảnh cho các chuyển động tạo các đối tượng sản phẩm trừu tượng.ConcreteFactory : thực hiện các chuyển động được khai báo trong AbstractFactory để tạo nên các đối tượng người tiêu dùng sản phẩm rứa thể.Sản phẩm(Product): khẳng định một đối tượng người sử dụng sản phẩm sẽ được tạo thành bởi nhà máy bê tông tương ứng và tiến hành giao diện AbstractProduct.Máy khách(Client): Chỉ sử dụng những giao diện được khai báo bởi những lớp AbstractFactory cùng AbstractProduct.

Abstract Factory cung cấp các đồ họa để chế tác họ các đối tượng liên quan hoặc nhờ vào mà không chỉ định những lớp cụ thể của chúng.

Phần mềm thiết bị khách(Client) tạo ra một triển khai cụ thể của abstract factory và kế tiếp sử dụng các giao diện bình thường để tạo thành các đối tượng ví dụ là một phần của bọn họ đối tượng.

Khách hàng(Client) đắn đo hoặc không lưu ý đến vật thể rõ ràng nào mà người ta nhận được từ mỗi nhà máy cụ thể này vì họ chỉ sử dụng các giao diện tầm thường của thành phầm của họ.

Xem thêm: Vì Sao Tư Bản Pháp Chú Trọng Đến Việc Khai Thác Mỏ Than Ở Việt Nam ? A

Vì vậy, với phát minh về mẫu Abstract Factory này, hiện thời chúng ta sẽ nỗ lực tạo ra một kiến tạo sẽ chế tạo ra điều kiện dễ dàng cho việc tạo nên các đối tượng liên quan.


2. Thực hiện

Hãy mang một ví dụ, trả sử chúng ta muốn xuất bản một xí nghiệp sản xuất xe hơi toàn cầu. Nếu chính là mẫu thiết kế nhà thứ , thì nó cân xứng với một vị trí duy nhất. Nhưng đối với pattern này, bọn họ cần những vị trí cùng một số đổi khác thiết kế quan lại trọng.

Chúng ta cần các nhà thiết bị sản xuất xe hơi ở từng vị trí như IndiaCarFactory, USACarFactory cùng DefaultCarFactory. Bây giờ, áp dụng của họ phải đủ thông minh để xác xác định trí địa điểm ứng dụng đang được sử dụng, vì chưng vậy chúng ta sẽ rất có thể sử dụng xí nghiệp sản xuất sản xuất ô tô cân xứng mà không nên biết việc triển khai xí nghiệp sản xuất ô tô nào sẽ được sử dụng trong nội bộ. Điều này cũng giúp bọn họ tránh bị ai đó hotline nhầm nhà máy cho một vị trí vắt thể.

Ở đây chúng ta cần một tấm trừu tượng khác vẫn xác định vị trí và sử dụng nội bộ việc triển khai đúng chuẩn nhà lắp thêm sản xuất xe hơi mà không chỉ dẫn một lưu ý nào cho tất cả những người dùng. Đây đúng là vấn đề mà quy mô abstract factory được thực hiện để 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 oto LuxuryCar(Location location) super(CarType.LUXURY, location); construct();
Override protected void construct() System.out.println("Connecting to luxury car"); class MicroCar extends oto MicroCar(Location location) super(CarType.MICRO, location); construct();
Override protected void construct() System.out.println("Connecting khổng lồ Micro car "); class MiniCar extends oto MiniCar(Location location) super(CarType.MINI,location ); construct();
Override void construct() System.out.println("Connecting lớn Mini car"); enum Location DEFAULT, USA, INDIA class INDIACarFactory static oto buildCar(CarType model) car car = 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 oto buildCar(CarType model) car car = null; switch (model) case MICRO: oto = new MicroCar(Location.DEFAULT); break; case MINI: car = new MiniCar(Location.DEFAULT); break; case LUXURY: car = new LuxuryCar(Location.DEFAULT); break; default: break; return car; class USACarFactory public static oto buildCar(CarType model) car car = 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 car = null; // We can địa chỉ cửa hàng any GPS Function here which // read location property somewhere from configuration // & use location specific oto factory // Currently I"m just using INDIA as Location Location location = Location.INDIA; switch(location) case USA: car = USACarFactory.buildCar(type); break; case INDIA: car = INDIACarFactory.buildCar(type); break; default: oto = 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 khổng lồ Micro oto CarModel - MICRO located in INDIAConnecting to lớn Mini carCarModel - MINI located in INDIAConnecting to lớn luxury carCarModel - LUXURY located in INDIA3. Sự không giống biệtSự khác biệt chính giữa “factory method” và “abstract factory” là factory method là 1 trong những phương thức duy nhất cùng abstract factory là 1 đối tượng.factory method chỉ là 1 trong phương thức, nó có thể được ghi đè trong một tờ con, trong những lúc abstract factory là 1 đối tượng có tương đối nhiều factory method trong đó.Factory Method Pattern thực hiện tính kế thừa và dựa vào một lớp con để xử lý việc khởi tạo đối tượng người tiêu dùng mong muốn.4. Ưu điểmMẫu này quan trọng hữu ích khi khách hàng không biết đúng đắn loại phải tạo.

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

LƯU Ý: Phần như thế nào ví dụ trên cũng dựa trên Cách buổi giao lưu của các Cabs như uber cùng ola trên bài bản lớn.

Cài áp dụng ttmn.mobi để dễ dàng update tin và học xây dựng mọi lúc các nơi tại đây.

Tài liệu trường đoản cú ttmn.mobi:

Nếu chúng ta thấy hay và hữu ích, chúng ta cũng có thể tham gia các kênh sau của ttmn.mobi để nhận được nhiều hơn nữa: