Chuyển đến nội dung chính

Effective Java 01 - Consider static factory methods instead of constructors

Ở bài viết này, chúng ta sẽ bàn về cách để tạo Object trong Java.

Để tạo mới một Object trong Java thì cách truyền thống là provide một public constructor và sử dụng keyword new ở client.

Có một cách khác mà chúng ta nên biết và consider để sử dụng thay cho cách truyền thống đó là provide static factory methods.

Vậy ưu điểm và nhược điểm của static factory methods là gì, chúng ta sẽ cùng tìm hiểu trong bài viết này.

Cách truyền thống: Provide a public constructor

Ví dụ:

Class Student.java

public class Student {
    private long id;
    private String name;
    public Student(long id, String name) {
        this.id = id;
        this.name = name;
    }
}

Client có thể tạo instance bằng cách sử dụng new keyword:

Student student = new Student(1, "Nguyễn Văn A");

Sử dụng Static Factory Methods

Ví dụ:

Class Student.java

public class Student {
    private long id;
    private String name;
    private Student(long id, String name) {
        this.id = id;
        this.name = name;
    }
    
    public static Student newInstance(long id, String name) {
        return new Student(id, name);
    }
}

Client tạo instance bằng cách sử dụng static factory method "newInstance"

Student student = Student.newInstance(1, "Nguyễn Văn A");

Ưu điểm

  1. Không giống như constructor, chúng ta có thể định nghĩa tên cho static factory method.
  2. Constructor luôn tạo mới Object, còn static factory method thì không bắt buộc.
    Ví dụ:
    public static Boolean valueOf(boolean b) {
        return b ? Boolean.TRUE : Boolean.FALSE;
    }
    

    Ngoài ra, static factory có thể dùng để tạo Singleton Object.
  3. Có thể return về SubType.
  4. Có thể return về Interface.

Nhược điểm

  1. Khi sử dụng static factory cho class không có public hoặc protected constructor thì class đó sẽ không thể được kế thừa bởi bất cứ class nào khác.
  2. Khó để lập trình viên tìm kiếm và sử dụng khi có nhiều static factory methods. => nên có javadoc

Tổng kết

Bài viết này giới thiệu về một kỹ thuật tạo Object khá hay của Java là sử dụng Static factory methods.
Bằng cách hiểu ưu và nhược điểm của nó, bạn có thể consider để apply vào project của mình một cách hiệu quả.

Hy vọng bạn có được thêm kiến thức mới.
Keep learning 💪

Nhận xét

Bài đăng phổ biến từ blog này

Effective Java 02 - Consider a builder when faced with many constructor parameters

 Khi một Object có thể được tạo từ nhiều attributes khác nhau thì chúng ta nên consider sử dụng Builder Pattern thay cho Static factories hoặc Constructors . Ví dụ sử dụng Builder Pattern: // Builder Pattern public class NutritionFacts { private final int servingSize ; private final int servings ; private final int calories ; private final int fat ; private final int sodium ; private final int carbohydrate ; public static class Builder { // Required parameters private final int servingSize ; private final int servings ; // Optional parameters - initialized to default values private int calories = 0 ; private int fat = 0 ; private int sodium = 0 ; private int carbohydrate = 0 ; public Builder ( int servingSize , int servings ) { this . servingSize = servingSize ; this . servings = servings ; } public Builder calories ( int val ) { calories = val ; retu...