Abstract Factory pattern là một trong những mẫu chế tạo ra dựng (Creation Pattern). Abstract Factory pattern hết sức giống như cùng với Factory Pattern xung quanh vấn đề nó là factory của các factory.

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

1. Abstract Factory Pattern.

Nếu chúng ta đang thân quen với Factory Pattern thì bạn sẽ thấy nó chỉ có một Factory class, factory class này vẫn trả về các class con (sub-class) dựa trên dầu vào (factory class sử dụng if-else hoặc switch để xác định class nhỏ đầu ra).

Trong Abstract Factory pattern, bọn họ ko phải if-else hoặc switch. Mỗi sub-class sẽ sở hữu được một factory class. Abstract Factory class sẽ trả về sub-class dựa trên nguồn vào là factory class.

Một số ví dụ về Abstract Factory trong JDK:
javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transsize.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance() Lợi ích của Abstract Factory Pattern.Abstract Factory pattern hỗ trợ hưỡng tiếp cận code bởi interface rứa vì chưng những thiết đặt (Giống cùng với Factory Pattern)Abstract Factory pattern là “factory của các factory” cùng hoàn toàn có thể dễ dàng dạng không ngừng mở rộng để đựng thêm các factory cùng những sub-classAbstract Factory giúp tránh khỏi Việc thực hiện điều kiện logic như bên trong Factory Pattern.2. Abstract Factory Pattern UML Diagram

Cũng giống như Factory Pattern, họ sẽ thực hiện các super class, sub-class

 
*

Khác cùng với Factory Pattern, trong Abstract Factory có tương đối nhiều Factory Class (ConcreateFactory_1, ConcreteFactory_2) thuộc implement AbstractFactory, mỗi Factory Class bé này đã triển khai trả về các object không giống nhau.

3.Ví dụ

Ta bao gồm class cha là computer với 2 class bé Server với PC.

Xem thêm: Đối Tượng Xmlhttprequest Là Gì ? Đối Tượng Xmlhttprequest Trong Ajax

ComputerAbstractFactory là một interface cung ứng cách làm trả về đối tượng Computer.

ServerFactory và PCFactory đang thiết lập những phương thức của ComputerAbstractFactory.

ComputerFactory sẽ áp dụng ComputerAbstractFactory để chế tác đối tượng Computer. (Trường hợp ComputerAbstractFactory là ServerFactory thì vẫn trả về đối tượng người sử dụng Server, trường hợp ComputerAbstractFactory là PCFactory thì sẽ trả về đối tượng người tiêu dùng PC)


*

Computer.java

public abstract class Computer public abstract String getRAM(); public abstract String getHDD(); public abstract String getCPU();
Override public String toString() return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU(); Factory Design Pattern Sub Classes

PC.java

public class PC extends Computer private String ram; private String hdd; private String cpu; public PC(String ram, String hdd, String cpu) this.ram=ram; this.hdd=hdd; this.cpu=cpu;
Override public String getRAM() return this.ram;
Override public String getHDD() return this.hdd;
Override public String getCPU() return this.cpu;

Server.java

public class Server extends Computer private String ram; private String hdd; private String cpu; public Server(String ram, String hdd, String cpu) this.ram=ram; this.hdd=hdd; this.cpu=cpu;
Override public String getRAM() return this.ram;
Override public String getHDD() return this.hdd;
Override public String getCPU() return this.cpu; ComputerAbstractFactory.java

import com.journaldev.thiết kế.model.Computer;public interface ComputerAbstractFactory public Computer createComputer();PCFactory.java

public class PCFactory implements ComputerAbstractFactory private String ram; private String hdd; private String cpu; public PCFactory(String ram, String hdd, String cpu) this.ram=ram; this.hdd=hdd; this.cpu=cpu;
Override public Computer createComputer() return new PC(ram,hdd,cpu); ServerFactory.java

public class ServerFactory implements ComputerAbstractFactory private String ram; private String hdd; private String cpu; public ServerFactory(String ram, String hdd, String cpu) this.ram=ram; this.hdd=hdd; this.cpu=cpu;
Override public Computer createComputer() return new Server(ram,hdd,cpu); ComputerFactory.java

public class ComputerFactory public static Computer getComputer(ComputerAbstractFactory factory) return factory.createComputer(); Demo:

public class TestDesignPatterns public static void main(String<> args) testAbstractFactory(); private static void testAbstractFactory() Computer pc = ComputerFactory.getComputer(new PCFactory("2 GB","500 GB","2.4 GHz")); Computer server = ComputerFactory.getComputer(new ServerFactory("16 GB","1 TB","2.9 GHz")); System.out.println("AbstractFactory PC Config::"+pc); System.out.println("AbstractFactory Server Config::"+server); Kết quả:

AbstractFactory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHzAbstractFactory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz

Bây giờ đồng hồ nếu còn muốn thêm 1 sub-class khác, ví như Laptop chẳng hặn thì ta chỉ việc chế tác class Laptop.java và LaptopFactory.java là được.

References: https://www.journaldev.com/1418/abstract-factory-design-pattern-in-java


This entry was posted in Design Pattern và tagged kiến thiết pattern. Bookmark the permalinks.

Điều hướng bài xích viết


← Factory Pattern – Code ví dụ Factory Pattern bởi Java.
Builder Pattern – Code ví dụ Builder Pattern bằng Java. →
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *