STACKJAVA

Factory Pattern – Code ví dụ Factory Pattern bằng Java.

Factory Pattern – Code ví dụ Factory Pattern bằng Java.

Factory Pattern hay còn được biết tới là Factory Method Pattern.

1. Factory Pattern là gì?

Factory Pattern là một mẫu thiết kế tạo dựng (Creation Pattern), nó được sử dụng rộng rãi trong JDK và các Framework như Spring, Struts.

Factory Pattern được sử dụng khi có một class cha (super class) với nhiều class con (sub-class), dựa trên đầu vào và phải trả về 1 trong những class con đó.

Lợi ích của Factory Pattern
Ví dụ: Một số class, method áp dụng Factory Pattern trong JDK

2. Factory Pattern UML Diagram

ParrentClass: super class

SubClass_1, SubClass_2: Các class cần trả về

Creator: Interface khai báo factoryMethod trả về ParrentClass

ConcreteCreator: Thực hiện cài đặt Creator.

(Thông thường vì chỉ có 1 class ConcreteCreator implement Creator thì Creator sẽ được bỏ qua)

3. Ví dụ

Ta có class cha là Computer và 2 class con ServerPC.

ComputerFactory thực hiện trả về đối tượng Server hoặc PC tùy theo dữ liệu đầu vào.

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;
  }

}

Factory Class

ComputerFactory.java

public class ComputerFactory {

  public static Computer getComputer(String type, String ram, String hdd, String cpu){
    if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
    else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
    
    return null;
  }
}

Một số điểm quan trọng về Factory Pattern là:

Demo

public class TestFactory {

  public static void main(String[] args) {
    Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
    Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
    System.out.println("Factory PC Config::"+pc);
    System.out.println("Factory Server Config::"+server);
  }

}

Kết quả:

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

 

Thanks các bạn đã theo dõi. Xem thêm các ví dụ khác về design pattern tại: https://stackjava.com/category/design-pattern

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