645
Chương 16: Các giao diện và mẫu thông dụng
void
và nhận hai đối số: một đối tượng
Thermostat
và một đối tượng
TemperatureChangeEventArgs
. Trong quá trình thông báo, đối số
Thermostat
chỉ đến đối
tượng
Thermostat
đã dựng nên sự kiện, và đối số
TemperatureChangeEventArgs
chứa các dữ
liệu về nhiệt độ cũ và mới.
// Ủy nhiệm cho biết chữ ký mà tất cả các phương thức
// thụ lý sự kiện phải hiện thực.
public delegate void TemperatureEventHandler(Thermostat s,
TemperatureChangeEventArgs e);
Lớp
Thermostat
là đối tượng bị giám sát trong mẫu Observer (Event) này. Theo lý thuyết, một
thiết bị giám sát thiết lập nhiệt độ hiện tại bằng cách gọi thuộc tính
Temperature
trên một đối
tượng
Thermostat
. Khi đó, đối tượng
Thermostat
dựng nên sự kiện
TemperatureChange
và gửi
một đối tượng
TemperatureChangeEventArgs
đến mỗi observer. Dưới đây là mã lệnh cho lớp
Thermostat
:
// Lớp mô tả một bộ ổn nhiệt, là nguồn gốc của các sự kiện thay đổi
// nhiệt độ. Trong mẫu Observer, đối tượng Thermostat là subject.
public class Thermostat {
// Trường private dùng để giữ nhiệt độ hiện tại.
private int temperature = 0;
// Sự kiện dùng để duy trì danh sách các ủy nhiệm observer và
// dựng nên sự kiện thay đổi nhiệt độ.
public event TemperatureEventHandler TemperatureChange;
// Phương thức protected dùng để dựng nên sự kiện TemperatureChange.
// Vì sự kiện chỉ có thể được phát sinh bên trong kiểu chứa nó nên
// việc sử dụng phương thức protected cho phép các lớp dẫn xuất
// có cách hành xử tùy biến và vẫn có thể dựng nên sự kiện
// của lớp cơ sở.
virtual protected void RaiseTemperatureEvent
(TemperatureChangeEventArgs e) {
if (TemperatureChange != null) {
TemperatureChange(this, e);
}
}
// Thuộc tính public dùng để lấy và thiết lập nhiệt độ hiện tại.
// Phía "set" chịu trách nhiệm dựng nên sự kiện thay đổi nhiệt độ