Trong bài viết này mình sẽ giới thiệu đến các bạn Observer Design Pattern trong C# – Cách triển khai và ví dụ. Đây là một pattern thuộc nhóm Behavioral Design Pattern trong C#.
Chúng ta sẽ cùng nhau tìm hiểu về Observer Design Pattern là gì? Cách triển khai trong C# và ví dụ cụ thể về nó.
Observer Design Pattern trong C# là gì?
Observer Design Pattern xác định sự phụ thuộc từ một đến nhiều giữa các đối tượng. Khi một đối tượng thay đổi trạng thái, tất cả các đối tượng phụ thuộc nó sẽ được thông báo và tự động cập nhật.
Observer Design Pattern sẽ thông báo cho các thành phần phụ thuộc vào nó khi có thay đổi bằng cách gọi một trong các phương thức của chúng.
Bài viết này được đăng tại [kiso.vn]
Các tên gọi khác của mô hình này là Producer / Consumer, Publish / Subscribe.
Observer Design Pattern có hai thành phần chính như sau:
- Subject: Đây là Publishers (nhà xuất bản), khi có một thay đổi xảy ra nó phải thông báo cho các Subscribers (người đăng ký).
- Observer: Đây là các Subscribers, nó chỉ đơn giản là lắng nghe những thay đổi từ các đối tượng. Một tên gọi khác của Observer là Listener.
Cách triển khai và ví dụ về Observer Design Pattern trong C#
Trong phần này mình sẽ thực hiện triển khai Observer Design Pattern thông qua một ví dụ cụ thể dưới đây. Các bạn hãy cùng mình thực hiện theo từng bước nhé.
Bước 1: Tạo interface ISubject.
Class này cung cấp một interface để thêm hoặc xóa bất kì số lượng đối tượng Observer nào.
using System; using System.Collections.Generic; using System.Text; namespace ObserverDesignPattern { public interface ISubject { void RegisterObserver(IObserver observer); void RemoveObserver(IObserver observer); void NotifyObservers(); } }
Bước 2: Tạo class Subject.
Class này lưu trữ các trạng thái cho Observer và chịu trách nhiệm gửi thông báo khi có thay đổi.
using System; using System.Collections.Generic; using System.Text; namespace ObserverDesignPattern { public class Subject : ISubject { private List<IObserver> observers = new List<IObserver>(); private string ProductName { get; set; } private int ProductPrice { get; set; } private string Availability { get; set; } public Subject(string productName, int productPrice, string availability) { ProductName = productName; ProductPrice = productPrice; Availability = availability; } public string getAvailability() { return Availability; } public void setAvailability(string availability) { this.Availability = availability; Console.WriteLine("Availability changed from Out of Stock to Available."); NotifyObservers(); } public void RegisterObserver(IObserver observer) { Console.WriteLine("Observer Added : " + ((Observer)observer).UserName); observers.Add(observer); } public void AddObservers(IObserver observer) { observers.Add(observer); } public void RemoveObserver(IObserver observer) { observers.Remove(observer); } public void NotifyObservers() { Console.WriteLine("Product Name :" + ProductName + ", product Price : " + ProductPrice + " is Now available. So notifying all Registered users "); Console.WriteLine(); foreach (IObserver observer in observers) { observer.update(Availability); } } } }
Bước 3: Tạo interface IObserver.
Class này xác định interface cập nhật cho các đối tượng cần được thông báo về những thay đổi.
using System; using System.Collections.Generic; using System.Text; namespace ObserverDesignPattern { public interface IObserver { void update(string availability); } }
Bước 4: Tạo class Observer.
Class Observer duy trì việc tham chiếu đến một đối tượng Subject và triển khai interface IObserver.
using System; using System.Collections.Generic; using System.Text; namespace ObserverDesignPattern { public class Observer : IObserver { public string UserName { get; set; } public Observer(string userName, ISubject subject) { UserName = userName; subject.RegisterObserver(this); } public void update(string availabiliy) { Console.WriteLine("Hello " + UserName + ", Product is now " + availabiliy + " on Amazon"); } } }
Bước 5: Tạo class Program để chạy chương trình và kiểm tra kết quả.
using System; namespace ObserverDesignPattern { class Program { static void Main(string[] args) { //Create a Product with Out Of Stock Status Subject RedMI = new Subject("Red MI Mobile", 10000, "Out Of Stock"); //User Anurag will be created and user1 object will be registered to the subject Observer user1 = new Observer("Anurag", RedMI); //User Pranaya will be created and user1 object will be registered to the subject Observer user2 = new Observer("Pranaya", RedMI); //User Priyanka will be created and user3 object will be registered to the subject Observer user3 = new Observer("Priyanka", RedMI); Console.WriteLine("Red MI Mobile current state : " + RedMI.getAvailability()); Console.WriteLine(); // Now product is available RedMI.setAvailability("Available"); Console.WriteLine("n------------------------------------"); Console.WriteLine("Chuong trinh nay duoc dang tai Kiso.vn"); Console.Read(); } } }
Kết quả:
Như vậy là chúng ta đã cùng nhau tìm hiểu về Observer Design Pattern trong C# – Cách triển khai và ví dụ cụ thể về nó. Ở bài tiếp theo mình sẽ giới thiệu đến các bạn Command Design Pattern trong C#.
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chínhObserver Design Pattern trong C# là gì?Cách triển khai...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chínhObserver Design Pattern trong C# là gì?Cách triển khai và ví dụ về Observer Design Pattern trong C#1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chínhObserver Design Pattern trong C# là gì?Cách triển khai và ví dụ về Observer Design Pattern trong C#V. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng...
Directory traversal vulnerabilities (phần 3)
Nội dung chínhObserver Design Pattern trong C# là gì?Cách triển khai và ví dụ về Observer Design Pattern trong C#V. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra...
Directory traversal vulnerabilities (phần 2)
Nội dung chínhObserver Design Pattern trong C# là gì?Cách triển khai và ví dụ về Observer Design Pattern trong C#III. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác...