Factory Pattern là một trong những design pattern thuộc nhóm Creational Patterns (mẫu khởi tạo), được sử dụng để tạo đối tượng mà không để lộ logic khởi tạo phức tạp cho người dùng. Factory Pattern cung cấp một giao diện để tạo các đối tượng trong khi cho phép các lớp con quyết định lớp nào sẽ được khởi tạo.
Factory Pattern tập trung vào việc cung cấp một phương pháp hoặc lớp trung gian để tạo ra các đối tượng dựa trên các tham số cụ thể hoặc điều kiện, mà không để lớp khởi tạo trực tiếp các đối tượng đó. Nó thường được sử dụng khi hệ thống có nhiều lớp con hoặc kiểu đối tượng khác nhau nhưng cùng kế thừa từ một lớp cha hoặc interface chung.
Factory Pattern phù hợp khi bạn cần:
Ví dụ, nếu bạn có một ứng dụng quản lý phương tiện giao thông (xe hơi, xe tải, xe đạp), mỗi loại phương tiện sẽ có các đặc điểm riêng nhưng lại có cùng một giao diện cơ bản (ví dụ Vehicle
). Bạn có thể sử dụng Factory Pattern để tạo ra các đối tượng phương tiện dựa trên tham số đầu vào mà không cần phải khởi tạo từng loại phương tiện riêng lẻ trong mã chính.
// Interface Product (Giao diện cho các loại phương tiện) public interface Vehicle { void create(); } // Concrete Product 1: Xe hơi public class Car implements Vehicle { @Override public void create() { System.out.println("Xe hơi được tạo."); } } // Concrete Product 2: Xe tải public class Truck implements Vehicle { @Override public void create() { System.out.println("Xe tải được tạo."); } } // Concrete Product 3: Xe đạp public class Bicycle implements Vehicle { @Override public void create() { System.out.println("Xe đạp được tạo."); } } // Factory class (Lớp nhà máy tạo ra phương tiện) public class VehicleFactory { // Phương thức tạo phương tiện dựa trên loại public Vehicle createVehicle(String vehicleType) { if (vehicleType == null) { return null; } if (vehicleType.equalsIgnoreCase("CAR")) { return new Car(); } else if (vehicleType.equalsIgnoreCase("TRUCK")) { return new Truck(); } else if (vehicleType.equalsIgnoreCase("BICYCLE")) { return new Bicycle(); } return null; } } // Sử dụng Factory Pattern public class Main { public static void main(String[] args) { VehicleFactory vehicleFactory = new VehicleFactory(); Vehicle car = vehicleFactory.createVehicle("CAR"); car.create(); Vehicle truck = vehicleFactory.createVehicle("TRUCK"); truck.create(); Vehicle bicycle = vehicleFactory.createVehicle("BICYCLE"); bicycle.create(); } }
create
mà tất cả các lớp con phải triển khai.createVehicle
để tạo đối tượng dựa trên loại phương tiện yêu cầu (car, truck, bicycle).main
, chúng ta sử dụng VehicleFactory để tạo ra các đối tượng phương tiện mà không cần phải khởi tạo trực tiếp chúng.Factory Pattern là một giải pháp mạnh mẽ và linh hoạt trong việc quản lý việc tạo đối tượng, đặc biệt khi hệ thống có nhiều loại đối tượng cần khởi tạo từ một giao diện hoặc lớp chung. Nó giúp mã dễ bảo trì hơn và giảm thiểu sự phụ thuộc giữa các lớp.