CĂN BẢN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Observer Design Pattern trong C# - Cách triển khai và ví dụ

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#.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thứ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 01 png

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 [free tuts .net]

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.

observer 02 png

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.

ISubject.cs
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.

Subject.cs
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.

IObserver.cs
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.

Observer.cs
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ả.

Program.cs
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 Freetuts.net");
            Console.Read();
        }
    }
}

Kết quả:

observer 03 png

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#.

Cùng chuyên mục:

Memento Design Pattern trong C# - Cách triển khai và ví dụ

Memento Design Pattern trong C# - Cách triển khai và ví dụ

Interpreter Design Pattern trong C# - Cách triển khai và ví dụ

Interpreter Design Pattern trong C# - Cách triển khai và ví dụ

Strategy Design Pattern trong C# - Cách triển khai và ví dụ

Strategy Design Pattern trong C# - Cách triển khai và ví dụ

Visitor Design Pattern trong C# - Cách triển khai và ví dụ

Visitor Design Pattern trong C# - Cách triển khai và ví dụ

Command Design Pattern trong C# - Cách triển khai và ví dụ

Command Design Pattern trong C# - Cách triển khai và ví dụ

Iterator Design Pattern trong C# - Cách triển khai và ví dụ

Iterator Design Pattern trong C# - Cách triển khai và ví dụ

Proxy Design Pattern trong C# - Cách triển khai và ví dụ

Proxy Design Pattern trong C# - Cách triển khai và ví dụ

Composite Design Pattern trong C# - Cách triển khai và ví dụ

Composite Design Pattern trong C# - Cách triển khai và ví dụ

Bridge Design Pattern trong C# - Cách triển khai và ví dụ

Bridge Design Pattern trong C# - Cách triển khai và ví dụ

Decorator Design Pattern trong C# - Cách triển khai và ví dụ

Decorator Design Pattern trong C# - Cách triển khai và ví dụ

Facade Design Pattern trong C# - Cách triển khai và ví dụ

Facade Design Pattern trong C# - Cách triển khai và ví dụ

Adapter Design Pattern trong C# - Cách triển khai và ví dụ

Adapter Design Pattern trong C# - Cách triển khai và ví dụ

Singleton Design Pattern trong C# - Cách triển khai và ví dụ

Singleton Design Pattern trong C# - Cách triển khai và ví dụ

Prototype Design Pattern trong C# - Cách triển khai và ví dụ

Prototype Design Pattern trong C# - Cách triển khai và ví dụ

Builder Design Pattern trong C# - Cách triển khai và ví dụ

Builder Design Pattern trong C# - Cách triển khai và ví dụ

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Trong bài viết này Freetuts chia sẽ cho các bạn một ứng dụng khá thú…

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Chúng ta sẽ tìm hiểu về Factory Design Pattern trong C# là gì? Cách triển…

Hướng dẫn giải phương trình bậc hai trong C#

Hướng dẫn giải phương trình bậc hai trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Cách nối hai mảng trong C# bằng hai cách khác nhau

Cách nối hai mảng trong C# bằng hai cách khác nhau

Top