2011-01-18 49 views
72

Nói chung các thuật ngữ của java, có các trình xử lý & cho các sự kiện.
Tôi có nghĩa là tôi sử dụng chúng một cách vô tình, bất kỳ tùy chọn nào có sẵn trong API.Sự khác biệt giữa Trình xử lý sự kiện & Trình xử lý sự kiện trong Java là gì?

Câu hỏi của tôi là, trong trường hợp nào chúng tôi sử dụng người nghe và trong trường hợp nào chúng tôi sử dụng trình xử lý cho các sự kiện?

Sự khác nhau giữa chúng là gì? Đặc điểm ??

Tôi đã tìm kiếm lý do và tôi không thể tìm thấy lời giải thích thích hợp cho Java.

+0

Bài đăng trên blog này có tóm tắt tốt đẹp. http://lemnik.wordpress.com/2009/03/04/gwts-new-event-model-handlers-in-gwt-16/ – kevinarpe

Trả lời

50

Không có sự khác biệt được xác định chính thức giữa người nghe và người xử lý. Một số người có thể cho rằng họ có thể hoán đổi cho nhau. Tuy nhiên, với tôi, chúng có ý nghĩa hơi khác.

Trình nghe là đối tượng đăng ký sự kiện từ nguồn. Cf. observer pattern. Thông thường, bạn có thể có nhiều người nghe đăng ký từng loại sự kiện và họ là đã thêm thông qua phương thức addXyzListener.

Ví dụ:MouseListener trong API Java.

Trình xử lý là một đối tượng chịu trách nhiệm xử lý các sự kiện nhất định. Một trường hợp điển hình là cung cấp trình xử lý cho một sự kiện/nhiệm vụ cụ thể làm đối số cho một hàm tạo hoặc đặt phương thức xử lý thông qua phương thức setXyzHandler. Nói cách khác, bạn thường có một bộ xử lý cho mỗi loại sự kiện.

Ví dụ:MemoryHandler trong API Java.

+0

hi cảm ơn bạn đã trả lời. bạn có ý gì khi "đăng ký sự kiện"?ý bạn là gì bởi "người nghe"? – BKSpurgeon

+0

@BKSpurgeon, xem bài viết trên Wikipedia về Mẫu quan sát được liên kết trong câu trả lời. – aioobe

2

Chúng là khái niệm giống nhau - một đối tượng thực hiện một số hành động để phản hồi sự kiện giao diện người dùng. Nói chung, trong Swing, các đối tượng này được gọi là "trình xử lý" ở cấp độ cảm nhận (để xử lý các sự kiện phụ cấp thấp) và "người nghe" ở cấp UI trừu tượng hơn (nơi bạn sẽ triển khai logic ứng dụng của mình)).

-1

Đó là ngữ nghĩa.

  • Trình nghe là giao diện.
  • Bộ chuyển đổi là lớp thực hiện giao diện cụ thể và cung cấp triển khai trống cho các phương pháp của nó. Điều này sẽ giúp ích nếu bạn không phải thực hiện tất cả các phương thức giao diện.
  • Trình xử lý thực hiện một số giao diện hoặc ủy quyền các cuộc gọi đến một số giao diện.
+1

Tôi sẽ không nói rằng người nghe nhất thiết phải là một giao diện. Ví dụ [BasicButtonListener] (http://download.oracle.com/javase/6/docs/api/javax/swing/plaf/basic/BasicButtonListener.html) là một lớp cụ thể. – aioobe

20

Đây là cách tôi nhìn thấy nó:

Một nghe đồng hồ cho một sự kiện được sa thải. Ví dụ: KeyListener chờ KeyEvents, MessageListener chờ tin nhắn đến trên hàng đợi và cứ tiếp tục như vậy.

Trình xử lý có trách nhiệm xử lý sự kiện. Thông thường, người nghe và người xử lý đi tay trong tay.Ví dụ, KeyListener nói với ExitHandler rằng "chữ Q đã được nhấn" và trình xử lý thực hiện logic như dọn dẹp tài nguyên và thoát khỏi ứng dụng một cách duyên dáng. Similary một ButtonClickListener sẽ nói với cùng một ExitHandler rằng "nút Exit đã được nhấp". Vì vậy, trong trường hợp này, bạn có hai sự kiện khác nhau, hai trình nghe khác nhau nhưng chỉ có một trình xử lý.

4

Trình nghe, lắng nghe các sự kiện là đối tượng giá trị dữ liệu mô tả sự kiện. Khi sự kiện xảy ra và thứ tự các sự kiện thường quan trọng. Nhấn phím '0' theo sau là '1' khác với '1' và '0'.

Trình xử lý, xử lý một đối tượng phức tạp, ví dụ: một kết nối Socket mới. Trình xử lý có thể xử lý đối tượng trong bất kỳ khoảng thời gian nào. Thời gian tạo và trật tự đối tượng không quan trọng lắm. Một kết nối từ client0 hoặc client1 có thể xảy ra theo bất kỳ thứ tự nào.

30

Sự khác biệt cơ bản nhất là hiệp hội

  • Listener được gắn liền với Sự kiện nguồn (Ví dụ: bàn phím)
  • Handler được kết hợp với một Event (Ex: KeyDown)

Nói chung, sẽ chỉ có một Trình quản lý trung tâm quản lý tất cả các sự kiện, trong khi trong trường hợp Trình nghe của mỗi thực thể muốn nghe, sẽ có e để quản lý Bộ sưu tập người nghe của riêng mình

+0

Chuột là nguồn sự kiện, nếu bạn nhìn vào MouseListener tương tự được sát nhập với nguồn sự kiện whcih là Chuột – Swapnil

3

Người nghe là đối tượng được thông báo khi sự kiện xảy ra và có 2 yêu cầu chính - 1-nó phải được đăng ký với một hoặc nhiều nguồn để nhận thông báo cụ thể các loại sự kiện 2-nó phải thực hiện các phương thức để nhận và xử lý các thông báo này. Người xử lý có trách nhiệm xử lý các sự kiện.

2

Tôi nghĩ sự khác biệt là tinh tế bởi vì Trình lắng nghe cụ thể cũng là một trình xử lý sự kiện hoặc ít nhất có một phương pháp có thể được coi là một trình xử lý sự kiện. Đó là, một Listener cụ thể xử lý hoặc quản lý phản ứng cho sự kiện sau khi nhận được một đối tượng sự kiện (từ nguồn sự kiện) với tất cả các thông tin hữu ích về sự kiện vừa xảy ra (trên nguồn sự kiện). Khi Trình nghe này phải triển khai giao diện xxxListener buộc anh ta triển khai ít nhất một phương thức được thực thi bởi đối tượng nguồn sự kiện khi sự kiện xảy ra, do đó chính Listener có thể được coi là trình xử lý và chính xác hơn, phương thức của giao diện Listener được thực hiện bởi đối tượng Listener có thể được coi là trình xử lý sự kiện thực. Vì vậy, tôi xem trình xử lý sự kiện chỉ là mã được thực hiện để phản ứng với một sự kiện. Điều này khác với đối tượng Listener là một phần tử của một khái niệm trừu tượng hơn như mẫu thiết kế Observer. Đây là quan điểm cá nhân của tôi về chủ đề này.

3

Với ý nghĩ của tôi, sự khác biệt quan trọng nhất là thực tế là chúng tôi sử dụng người nghe theo nguồn của sự kiện, trái với trình xử lý, mỗi loại sự kiện.

0

EventHandler được giới thiệu trong JavaFX cho tất cả các điều khiển giao diện người dùng. Trong khi người nghe được mượn cho các quan sát, chẳng hạn như tài sản.

EventHandler là một cách để phân biệt các sự kiện quan sát và sự kiện ui.

Các vấn đề liên quan