-1

{ JAVA } Class Helper và Class Utility trong Java

Xin chào các bạn!

Trong bài viết này chúng ta sẽ tìm hiểu sự khác nhau giữa Class Helper và Class Utility trong Java. Đầu tiên, chúng ta sẽ tìm hiểu về ý nghĩa của 2 Class này và cách tạo chúng!

1. Class Helper

Một lớp Helper cung cấp các chức năng cần thiết cho việc vận hành chung của một chương trình Java. Các lớp Helper chứa các phương thức được sử dụng bởi các lớp khác để thực hiện các nhiệm vụ lặp đi lặp lại, không phải là mục đích chính của một ứng dụng.

Như tên gọi của nó, chúng giúp đỡ các lớp khác bằng việc cung cấp một số chức năng bổ sung cho các dịch vụ được cung cấp bởi những lớp đó.

Chúng chứa các phương thức để thực hiện các công việc tẻ nhạt và lặp đi lặp lại, làm cho cơ sở mã chung trở nên mô-đun hóa và có thể sử dụng lại trên nhiều lớp.

Một lớp Helper có thể được khởi tạo và có thể chứa các biến instance, các phương thức instance và static.

Có thể tồn tại nhiều thực thể của một lớp Helper trong ứng dụng của chúng ta. Khi các lớp khác nhau có những chức năng chung, chúng ta có thể nhóm những chức năng này lại để tạo thành một lớp Helper có thể truy cập được qua các lớp nhất định trong ứng dụng của chúng ta.

1.1. Cách Tạo 1 Class Helper

Chúng ta sẽ tạo một ví dụ về lớp Helper để hiểu rõ hơn về khái niệm.

Để tạo một lớp Helper, chúng ta sử dụng phạm vi truy cập mặc định (default) cho lớp của chúng ta. Phạm vi truy cập mặc định đảm bảo rằng chỉ có các lớp trong cùng một package mới có quyền truy cập vào lớp này, các phương thức và biến của nó:

class MyHelperClass {

    public double discount;

    public MyHelperClass(double discount) {
        if (discount > 0 && discount < 1) {
            this.discount = discount;
        }
    }

    public double discountedPrice(double price) {
        return price - (price * discount);
    }

    public static int getMaxNumber(int[] numbers) {
        if (numbers.length == 0) {
            throw new IllegalArgumentException("Ensure array is not empty");
        }
        int max = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > max) {
                max = numbers[i];
            }
        }
        return max;
    }

    public static int getMinNumber(int[] numbers) {
        if (numbers.length == 0) {
            throw new IllegalArgumentException("Ensure array is not empty");
        }
        int min = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] < min) {
                min = numbers[i];
            }
        }
        return min;
    }
}

Sau khi định nghĩa lớp, chúng ta có thể thêm bất kỳ số lượng phương thức instance và static liên quan nếu cần thiết.

Các lớp Helper có thể có phương thức instance bởi vì chúng có thể được khởi tạo.

Như thấy từ đoạn code trên, chúng ta có cả phương thức instance lẫn phương thức static trong MyHelperClass:

@Test
void whenCreatingHelperObject_thenHelperObjectShouldBeCreated() {
    MyHelperClass myHelperClassObject = new MyHelperClass(0.10);
    assertNotNull(myHelperClassObject);
    assertEquals(90, myHelperClassObject.discountedPrice(100.00));

    int[] numberArray = {15, 23, 66, 3, 51, 79};
    assertEquals(79, MyHelperClass.getMaxNumber(numberArray));
    assertEquals(3, MyHelperClass.getMinNumber(numberArray));
}

Từ đoạn Test, chúng ta có thể thấy rằng một đối tượng Helper đã được tạo ra. Các phương thức static bên trong lớp Helper được truy cập thông qua tên lớp.

2. Class Utility

Một lớp Util trong Java là lớp cung cấp các phương thức static có thể truy cập để sử dụng trong toàn bộ ứng dụng. Các phương thức static trong lớp tiện ích được dùng để thực hiện các thao tác chung trong ứng dụng của chúng ta.

Các lớp Util không thể được khởi tạo và đôi khi là không trạng thái, không có biến static nào. Chúng ta khai báo một lớp Util như là final, và tất cả các phương thức của nó phải là static.

Vì chúng ta không muốn lớp Util của mình được khởi tạo, một private constructor sẽ được khai báo. Có một private constructor có nghĩa là Java sẽ không tạo construtor mặc định cho lớp Util của chúng ta. Constructor có thể để trống.

Mục đích của một lớp Util là cung cấp phương thức để thực hiện những chức năng nhất định trong chương trình, trong khi lớp chính tập trung giải quyết vấn đề cốt lõi của nó.

Phương thức của một lớp Util được truy cập thông qua tên lớp. Nó làm cho code của chúng ta linh hoạt hơn khi sử dụng mà vẫn giữ được tính mô-đun.

Java có các lớp Util như java.util.Arrays, java.lang.Math, java.util.Scanner, java.util.Collections, v.v.

2.1. Cách Tạo 1 Class Util

Việc tạo một lớp Util không quá khác biệt so với cách chúng ta tạo một lớp Helper. Nhưng có một số việc được thực hiện khác biệt một chút khi tạo một lớp Util.

Để tạo một lớp Util, chúng ta sử dụng phạm vi truy cập công khai (public) và khai báo lớp là final. Từ khóa final được sử dụng khi tạo lớp Util có nghĩa là lớp sẽ không thay đổi được. Nó không thể được kế thừa hoặc khởi tạo.

Cùng tạo một lớp Util gọi là MyUtilityClass:

public final class MyUtilityClass {

    private MyUtilityClass(){}

    public static String returnUpperCase(String stringInput) {
        return stringInput.toUpperCase();
    }

    public static String returnLowerCase(String stringInput) {
        return stringInput.toLowerCase();
    }

    public static String[] splitStringInput(String stringInput, String delimiter) {
        return stringInput.split(delimiter);
    }

}

Một quy tắc khác cần chú ý là tất cả các phương thức của một lớp Util đều là static, dùng phạm vi truy cập public.

Vì chúng ta chỉ có các phương thức static bên trong các lớp Util, những phương thức này chỉ có thể được truy cập qua tên lớp:

@Test
void whenUsingUtilityMethods_thenAccessMethodsViaClassName(){
    assertEquals(MyUtilityClass.returnUpperCase("helloanhem"), "HELLOANHEM");
    assertEquals(MyUtilityClass.returnLowerCase("AcCrA"), "accra");
}

Các phương thức returnUpperCase() và returnLowerCase() trong lớp Util chỉ được truy cập thông qua tên lớp, như đã thấy ở trên.

3. So sánh Class Helper với Class Utility

Lớp Helper và lớp Util trong Java nói chung có cùng mục đích. Một lớp Util là một lớp Helper đa năng. Đôi khi các dev sử dụng các thuật ngữ này có thể hoán đổi cho nhau.

Điều này là bởi vì chúng bổ sung cho các lớp khác bằng việc cung cấp các phương thức xử lý những nhiệm vụ nhất định mà không phải là chức năng cốt lõi của ứng dụng.

Mặc dù chúng rất giống nhau, có một số điểm khác biệt rõ ràng giữa chúng:

  • Các lớp Helper có thể được khởi tạo, trong khi các lớp Util không thể được khởi tạo vì chúng có một private constructor.
  • Các lớp Helper có thể có biến instance và có cả phương thức instance lẫn static.
  • Các lớp Util chỉ có biến và phương thức static.
  • Các lớp Util thường có phạm vi truy cập public trong ứng dụng của chúng ta, trong khi các lớp Helper chỉ được phép truy cập trong cùng package.

4. Kết luận

Trong bài viết này, chúng ta đã khám phá lớp Helper và lớp Util là gì trong Java. Chúng ta cũng khám phá ra rằng lớp Helper và lớp Util rất giống nhau về bản chất bởi cách chúng được sử dụng trong các ứng dụng.

Chúng ta đã đi vào chi tiết về cách để tạo một Helper và một lớp Util.

Khi tạo các ứng dụng mạnh mẽ trong Java, chúng ta luôn nhớ rằng cần phải nhóm các phương thức tương tự nhưng độc lập thực hiện các nhiệm vụ lặp đi lặp lại vào một lớp Helper hoặc lớp Util. Đôi khi các dev tạo ra các lớp Util hoặc lớp Helper đi ngược lại với mô hình lập trình hướng đối tượng (OOP) của Java. Tuy nhiên, chúng làm cho cơ sở mã của chúng ta trở nên rất mô-đun hóa và có thể tái sử dụng.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí