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
và
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ề