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

Tổng quan


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.

Gợi ý triển khai một Comparator có khả năng so sánh các Circle (hình tròn)

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:

include "Circle.php";
include "Comparator.php";

class CircleComparator implements Comparator
{
  public function compare($circleOne, $circleTwo)
  {
      $radiusOne = $circleOne->getRadius();
      $radiusTwo = $circleTwo->getRadius();

      if ($radiusOne > $radiusTwo) {
          return 1;
      }  else if($radiusOne < $radiusTwo) {
          return -1;
      } else {
          return 0;
      }
  }
}

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

include "CircleComparator.php";

$circleOne = new Circle("circleOne", 6);
$circleTwo = new Circle("circleTwo", 4);
$circleComparator = new CircleComparator();
var_dump($circleComparator->compare($circleOne, $circleTwo));

Chạy chương trình và quan sát kết quả.
Mã nguồn tham khảo: https://github.com/codegym-vn/php-interface-comparable.git

Leave a Reply

Your email address will not be published. Required fields are marked *