[Thực hành] Triển khai interface ‘Comparator’ để so sánh cách lớp hình học

Mục tiêu

Luyện tập thiết kế và triển khai interface.

Điều kiện

Biết cách thiết kế và triển khai interface.

Mô tả

Ở bài thực hành trước đã tiến hành cho các lớp hình học triển khai interface Comparable để hỗ trợ so sánh “hơn, kém, bằng”.

Phương án này không phù hợp khi mà vì lý do gì đó, không thể thay đổi các lớp đã có sẵn, cũng như không thể tùy ý tạo ra và sử dụng các lớp kế thừa mới.

Trong trường hợp đó, ta có thể sử dụng những đối tượng thuộc những lớp mà có triển khai interface Comparator và phương thức compare() của nó, để phục phụ việc so sánh, như hướng dẫn dưới đây.

Mã cho các lớp hình học có thể tham khảo tại repository này.

Gợi ý triển khai một Comparator có khả năng so sánh các Circle

Học viên tự triển khai Comparator cho các lớp hình học còn lại.

Hướng dẫn

Bước 1: Tạo một lớp CircleComparator triển khai interface Comparator:

import java.util.Comparator;

public class CircleComparator implements Comparator<Circle> {

    @Override
    public int compare(Circle c1, Circle c2) {
        if (c1.getRadius() > c2.getRadius()) return 1;
        else if (c1.getRadius() < c2.getRadius()) return -1;
        else return 0;
    }
}

Bước 2: Tạo chương trình để kiểm thử CircleComparatorTest:

import java.util.Arrays;
import java.util.Comparator;

public class CircleComparatorTest {
    public static void main(String[] args) {
        Circle[] circles = new Circle[3];
        circles[0] = new Circle(3.6);
        circles[1] = new Circle();
        circles[2] = new Circle(3.5, "indigo", false);

        System.out.println("Pre-sorted:");
        for (Circle circle : circles) {
            System.out.println(circle);
        }

        Comparator circleComparator = new CircleComparator();
        Arrays.sort(circles, circleComparator);

        System.out.println("After-sorted:");
        for (Circle circle : circles) {
            System.out.println(circle);
        }
    }
}

Hướng dẫn nộp bài:

Up bài lên github

Paste link github vào phần nộp bài

Tham khảo mã nguồn tại repository này


            

Bài viết liên quan

Leave a Reply

Your email address will not be published.