646
Chương 16: Các giao diện và mẫu thông dụng
// để thông báo với tất cả các observer về thay đổi này.
public int Temperature {
get { return temperature; }
set {
// Tạo một đối tượng đối số sự kiện mới để chứa
// nhiệt độ cũ và mới.
TemperatureChangeEventArgs e =
new TemperatureChangeEventArgs(temperature, value);
// Cập nhật nhiệt độ hiện tại.
temperature = value;
// Dựng nên sự kiện thay đổi nhiệt độ.
RaiseTemperatureEvent(e);
}
}
}
Với mục đích minh họa mẫu Observer, ví dụ này có hai kiểu observer:
TemperatureAverageObserver
(hiển thị nhiệt độ trung bình mỗi khi một sự kiện thay đổi nhiệt
độ xảy ra) và
TemperatureChangeObserver
(hiển thị thông tin về sự thay đổi mỗi khi một sự
kiện thay đổi nhiệt độ xảy ra). Dưới đây là mã lệnh cho hai lớp này:
// Observer hiển thị thông tin về sự thay đổi nhiệt độ
// khi có một sự kiện thay đổi nhiệt độ xảy ra.
public class TemperatureChangeObserver {
// Phương thức khởi dựng (nhận một tham chiếu đến đối tượng
// Thermostat cần được TemperatureChangeObserver giám sát).
public TemperatureChangeObserver(Thermostat t) {
// Tạo một thể hiện ủy nhiệm TemperatureEventHandler và
// đăng ký nó với Thermostat đã được chỉ định.
t.TemperatureChange +=
new TemperatureEventHandler(this.TemperatureChange);
}