CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN về tìm hiểu cơ chế callback (bản dịch) trong Java này được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Xin chào, hôm nay tôi muốn chia sẻ với bạn một điều. Ví dụ, điều này được sử dụng rất nhiều trong JavaScript. Tôi sẽ nói về cuộc gọi lại. Bạn có biết khi nào và làm thế nào để sử dụng điều này? Bạn có thực sự hiểu cách sử dụng nó trong môi trường java không? Khi tôi tự hỏi mình những câu hỏi này, đó là lý do tại sao tôi bắt đầu nghiên cứu vấn đề này. Ý tưởng đằng sau điều này là Đảo ngược điều khiển (PS: Giải thích của Wikipedia là Đảo ngược điều khiển, viết tắt là IoC), là một nguyên tắc thiết kế trong lập trình hướng đối tượng có thể được sử dụng để giảm sự ghép nối giữa các mã máy tính.) Ví dụ này. mô tả cách thức hoạt động của khuôn khổ, cũng dựa trên "nguyên tắc Hollywood - Đừng gọi cho tôi, chúng tôi sẽ gọi cho bạn" được mọi người biết đến.
Để hiểu nó, hãy sử dụng mẫu gọi lại đơn giản trong Java. Các ví dụ cụ thể như sau:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
giao diện
Gọi lại {
vô hiệu
phương thứcToCallBack();
}
lớp học
Gọi lại
thực hiện
Gọi lại {
công cộng
vô hiệu
phương thứcToCallBack() {
Hệ thống.out.println(
"Tôi đã được gọi lại"
);
}
}
lớp học
Người gọi {
công cộng
vô hiệu
đăng ký(CallBack gọi lại) {
phương thức gọi lại để gọi lại();
}
công cộng
tĩnh
vô hiệu
main(String[] args) {
Người gọi người gọi =
mới
Người gọi();
Gọi lại gọi lại =
mới
Gọi lạiImpl();
người gọi.register(gọi lại);
}
}
|
Bạn có thể muốn hỏi tôi, khi nào nên sử dụng cái này hoặc sự khác biệt giữa cơ chế gọi trực tiếp và gọi lại là gì?
Câu trả lời là: Ví dụ này chỉ cho bạn cách xây dựng hàm gọi lại như vậy trong môi trường java. Tất nhiên không có ích gì khi sử dụng nó theo cách đó. Bây giờ chúng ta hãy xem xét nó chi tiết hơn.
Ý tưởng bên trong nó là sự đảo ngược quyền kiểm soát. Hãy sử dụng đồng hồ bấm giờ làm ví dụ thực tế. Giả sử bạn biết rằng có một bộ đếm thời gian đặc biệt hỗ trợ các cuộc gọi lại hàng giờ. Nói chính xác thì có nghĩa là cứ mỗi giờ đồng hồ sẽ gọi đến phương thức gọi mà bạn đã đăng ký.
Ví dụ cụ thể:
Chúng tôi muốn cập nhật trang web mỗi giờ. Đây là ví dụ về mô hình UML:

Giao diện gọi lại:
Trước tiên hãy xác định giao diện gọi lại:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
nhập khẩu
java. util. ArrayList;
nhập khẩu
java. util. List;
giao diện
Cập nhật thời gianGọi lại {
vô hiệu
Thời gian cập nhật(
dài
thời gian);
}
lớp học
Cập nhật thời gian trang web Gọi lại
thực hiện
Cập nhật thời gianGọi lại {
@Ghi đè
công cộng
vô hiệu
Thời gian cập nhật(
dài
thời gian) {
System.out.println(thời gian);
}
}
|
Trong ví dụ của chúng tôi, bộ đếm thời gian hệ thống hỗ trợ các phương thức gọi lại:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
lớp học
Hệ thống hẹn giờ {
Danh sách các lệnh gọi lại =
mới
ArrayList();
công cộng
vô hiệu
registerCallBackForUpdatesEveryHour(TimeUpdaterCallBack timerCallBack) {
gọi lại.add(timerCallBack);
}
công cộng
vô hiệu
một giờ đã hết hạn() {
vì
(TimeUpdaterCallBack timerCallBack : các lệnh gọi lại) {
timerCallBack.updateTime(System.currentTimeMillis());
}
}
}
|
Cuối cùng, đây là trình cập nhật thời gian của trang web trong ví dụ đơn giản giả của chúng tôi:

?
1
2
3
4
5
6
7
8
9
10
|
lớp học
Trình cập nhật WebSiteTime {
công cộng
tĩnh
vô hiệu
main(String[] args) {
Hệ thống hẹn giờ Hệ thống hẹn giờ =
mới
Bộ đếm thời gian hệ thống();
TimeUpdaterCallBack webSiteCallBackUpdater =
mới
Cập nhật thời gian trang web (WebSiteTimeUpdater)
SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater);
}
}
|
Văn bản gốc: http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/under Hiểu-callbacks-with-java.html.
Cuối cùng, bài viết tìm hiểu cơ chế gọi lại (bản dịch) trong Java kết thúc tại đây. Nếu bạn muốn biết thêm về cách hiểu cơ chế gọi lại (bản dịch) trong Java, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!