Abstract Factory pattern là 1 mẫu tạo nên dựng (Creation Pattern). Abstract Factory pattern khôn cùng giống với Factory Pattern ngoại trừ bài toán nó là factory của các factory.
Bạn đang xem: Abstract factory pattern là gì
Nếu các bạn đã quen thuộc với Factory Pattern thì bạn sẽ thấy nó chỉ có 1 Factory class, factory class này sẽ trả về các class con (sub-class) dựa vào dầu vào (factory class áp dụng if-else hoặc switch để khẳng định class nhỏ đầu ra).
Trong Abstract Factory pattern, họ không yêu cầu if-else hoặc switch. Từng sub-class sẽ sở hữu được một factory class. Abstract Factory class đang trả về sub-class dựa trên đầu vào là factory class.
Một số lấy ví dụ về Abstract Factory trong JDK:javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance() Lợi ích của Abstract Factory Pattern.Abstract Factory pattern cung cấp hưỡng tiếp cận code bởi interface thay vày các thiết đặt (Giống với Factory Pattern)Abstract Factory pattern là “factory của các factory” và có thể dễ dạng mở rộng để chứa thêm các factory và các sub-classAbstract Factory giúp tránh khỏi việc thực hiện điều kiện súc tích như bên trong Factory Pattern.2. Abstract Factory Pattern UML Diagram
Cũng y hệt như Factory Pattern, chúng ta sẽ sử dụng những 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, từng Factory Class con này sẽ thực hiện trả về những object khác nhau.
3.Ví dụTa tất cả class cha là computer với 2 class con Server và PC.
ComputerAbstractFactory là một trong những interface cung cấp phương thức trả về đối tượng Computer.
ServerFactory với PCFactory sẽ thiết lập các thủ tục của ComputerAbstractFactory.
ComputerFactory sẽ sử dụng ComputerAbstractFactory để tạo đối tượng Computer. (Trường hợp ComputerAbstractFactory là ServerFactory thì đang trả về đối tượng Server, ngôi trường hợp ComputerAbstractFactory là PCFactory thì vẫn trả về đối tượng người 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 hệ thống 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.design.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 hệ thống = 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 vps Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
Bây giờ nếu muốn thêm một sub-class khác, ví dụ như máy tính chẳng hặn thì ta chỉ cần tạo 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 design pattern. Bookmark the permalink.
Xem thêm: Quả Muỗm Là Quả Gì ? Sự Khác Nhau Giữa Quả Muỗm Và Quả Xoài Sự Khác Nhau Giữa Quả Muỗm Và Quả Xoài
Điều hướng bài bác viết
← Factory Pattern – Code lấy ví dụ như Factory Pattern bởi Java.
Builder Pattern – Code ví dụ Builder Pattern bằng Java. →