CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 644

644
Chương 16: Các giao diện và mẫu thông dụng

.NET Framework sử dụng một hiện thực cho mẫu Observer dựa-trên-sự-kiện và dựa-trên-ủy-
nhiệm thường xuyên đến nỗi nó được đặt một cái tên: mẫu Event. File ObserverExample.cs
chứa một hiện thực cho mẫu Event. Ví dụ này bao gồm:

Lớp

Thermostat

(subject)—theo dõi nhiệt độ hiện tại và thông báo với observer khi có

sự thay đổi nhiệt độ.

Lớp

TemperatureChangeEventArgs

—là một hiện thực tùy biến của lớp

System.EventArgs

, được sử dụng để đóng gói dữ liệu cần phân bổ cho observer.

Ủy nhiệm

TemperatureEventHandler

—định nghĩa chữ ký của phương thức mà tất cả

các observer của đối tượng

Thermostat

phải hiện thực, và đối tượng

Thermostat

sẽ gọi

phương thức này trong sự kiện thay đổi nhiệt độ.

Lớp

TemperatureChangeObserver

TemperatureAverageObserver

—là các observer

của lớp

Thermostat

.

Lớp

TemperatureChangeEventArgs

(được trình bày bên dưới) dẫn xuất từ lớp

System.EventArgs

. Lớp này sẽ chứa tất cả các dữ liệu cần thiết để subject truyền cho các

observer khi nó thông báo với chúng về một sự kiện. Nếu không cần truyền dữ liệu, bạn
không phải định nghĩa một lớp đối số mới (bạn chỉ cần truyền đối số

null

khi dựng nên sự

kiện). Xem mục 16.8 để biết rõ hơn về cách hiện thực lớp đối số sự kiện tùy biến.

// Lớp đối số sự kiện chứa thông tin về sự kiện thay đổi nhiệt độ.

// Một thể hiện của lớp này sẽ được truyền cùng với mỗi sự kiện.

public class TemperatureChangeEventArgs : System.EventArgs {

// Các thành viên dữ liệu chứa nhiệt độ cũ và mới.

private readonly int oldTemperature, newTemperature;

// Phương thức khởi dựng (nhận giá trị nhiệt độ cũ và mới).

public TemperatureChangeEventArgs(int oldTemp, int newTemp) {

oldTemperature = oldTemp;

newTemperature = newTemp;

}

// Các thuộc tính dùng để truy xuất các giá trị nhiệt độ.

public int OldTemperature { get { return oldTemperature; } }

public int NewTemperature { get { return newTemperature; } }

}

Đoạn mã dưới đây trình bày cách khai báo ủy nhiệm

TemperatureEventHandler

. Dựa trên khai

báo này, tất cả các observer phải hiện thực một phương thức (tên không quan trọng), trả về

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.