Calback trong java là gì? Ví dụ trong thực tế giải thích một cách dễ hiểu.

Đăng bởi: Admin | Lượt xem: 2012 | Chuyên mục: Java

Trong bài viết này ta sẽ đi tìm hiểu callback là gì? Callback được sử dụng như thế nào cho hiệu quả? Và lấy các ví dụ thực tế để bạn có thể hiểu callback một cách dễ dàng nhất.


Callback (gọi ngược trở lại) có thể giải thích theo một số case trong đời sống như sau:
1. Asynchronous callback (bất đồng bộ)
Bạn nghi ngờ vợ ngoại tình và muốn có chứng cớ để còn mà xử đẹp cái thằng dám “mèo chuột” nữ nhân của mình. Nhưng mà theo dõi 3 ngày rồi mà chẳng thấy gì cả mặc dù biểu hiện ở nhà của vợ nhìn rất chi là ngứa mắt. Mà giờ xin nghỉ cả tháng đi theo dõi vợ thì ai đi làm nuôi con bây giờ. Giải pháp?

Thuê 1 thằng thám tử, còn mình thì đi làm, khi nào có “event: vào nhà nghỉ” thì thằng thám tử sẽ nhấc phone, alo để mình phi xử đôi gian phu dâm phụ này.

class Event {
}
interface ThamTu {
    void phoneToHusband();
}
class ThamTuConan implements ThamTu {
    private  Event event = new Event();

    public ThamTuConan(){
         monitor();
         somthingHappen(event);
    }
    public void phoneToHusband() {
       //check event
       if(event == event.VO_HOTEL){
         System.out.println("Đại bàng gọi thợ săn, thỏ con chui vào hang. Mang gậy tới mần thịt nhé.");
       }
    }
}
class Husband {
    public void registerEnterHotelEvent(ThamTu thamtu) {
        thamtu.phonetoHusband();
    }

   public static void main(String[] args) {
      Husband chong = new Husband();
      ThamTu conan = new ThamTuConan();
      chong.registerEnterHotelEvent(conan); //register thám tử còn mình thôi monitor

     chong.continueWorkingtoFeedChildren(); // tiếp tục đi làm kiếm tiền nuôi con
   }
}

Ví dụ này bạn có thể liên hệ với EventListener trong lập trình Swing vậy. Bất cứ khi nào có sự kiện click trên Button, thì cái callback function trong EventListener sẽ được fire (trong Java không có khái niệm function callback, nên để lập trình hướng sự kiện event-driven programming buộc phải thiết kế object/interface callback. Nếu trong javascript thì khái niệm callback này sẽ dễ hiểu hơn.

$('#btnEnterHotel').click(phoneToHusband);
function phoneToHusband(){
      alert("Đại bàng gọi thợ săn, thỏ con chui vào hang. Mang gậy tới mần thịt nhé.");
}

Hàm click sẽ gọi một callback function khi có sự kiện bấm trên nút btnEnterHotel.

2. Synchronous callback
Theo định nghĩa của callback thì nó là một đoạn code được truyền như là tham số tới một đoạn code khác, và sẽ được gọi tại một thời điểm nào đó. Khác với async callback, sync callback sẽ được gọi ngay khi xử lý (thường được gọi vào cuối hàm, function call at the back , nhất là trong lập trình Win32API, thường thì khi cuối hàm, bạn muốn OS làm một magic task nào đó, bạn sẽ viết kiểu generic vậy để lập trình viên có thể chọn: ví dụ như clear RAM, báo thức, …).

Bạn có thể map nó với 1 trường hợp trong thực tế như sau:
Bạn đi vệ sinh, trong lúc đó vì quá rảnh rỗi, bạn muốn tận dụng thời gian làm một cái gì đó nữa, ví dụ như chơi game, xem youtube, … Bạn sẽ define các function này và tuỳ vào context mà gọi nó ra (ví dụ đang chơi CoC thì buồn đi vệ sinh …, nếu giờ không oánh nữa thì chúng nó cướp hết resource, vậy ta vào và chơi tiếp)

function diWC(i, callbackFn) {
     i++; // đếm cừu
     callbackFn();
}

function playCoC() {
    alert("Chơi tiếp");
}

function watchYoutube() {
    alert("Xem tiếp");
}

//context: sợ bị cướp tài nguyên 
diWC(1, playCoC);

//context: rảnh rỗi
diWC(1, watchYoutube);

Cái này được thiết kế khá nhiều trong Java, ví dụ như thực hiện so sánh các phần tử trong ArrayList, bạn truyền 1 callback interface Comparable vào (ArrayList được gọi là high-level layer, còn Comparable được gọi là low-level layer). Bạn thích so sánh kiểu gì thì làm, ArrayList không quan tâm, miễn là sau khi so sánh ta có một ArrayList được sắp xếp. Đây cũng là một design pattern khá thông dụng và được áp dụng nhiều

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Java

Tổng hợp Bài tập Java có lời giải
Số bài học:
Lượt xem: 17364
Đăng bởi: Admin
Chuyên mục: Java

Lập trình Java cơ bản
Số bài học:
Lượt xem: 39925
Đăng bởi: Admin
Chuyên mục: Java