Visitor 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 Visitor 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ề Visitor Design Pattern là gi? Cách triển khai trong C# và một vài ví dụ cụ thể về nó.

Visitor Design Pattern trong C# là gì?

Visitor Design Pattern được sử dụng để thay đổi thuật toán thực thi của một đối tượng phần tử. Bằng cách này, khi visitor truy cập khác nhau, thuật toán thực thi của đối tượng cũng có thể khác nhau.

visitor 01 png

Bài viết này được đăng tại [kiso.vn]

Visitor Design Pattern nên được sử dụng khi chúng ta có các hoạt động riêng biệt. Các hành động này không liên quan với nhau để thực hiện trên một cấu trúc của đối tượng.

Ví dụ: Giả sử mình có một trường học và trong tường có rất nhiều học sinh. Một ngày nó, nhà trường mời một bác sĩ khoa nhi đến khám cho các học sinh. Công việc của bác sĩ là đến thăm trường và khám cho các em học sinh.

Trong đó:

  • Visitor: Là bác sĩ khoa nhi.
  • Object Structure: Là tập hợp các học sinh.

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

Trong phần này mình sẽ thực hiện triển khai Visitor Design Pattern trong qua một ví dụ cụ thể sau đây. Các bạn hãy cùng mình thực hiện theo trình tự các bước nhé.

Bước 1: Tạo interface IElement.

Trong class khai báo một phương thức Accept() lấy interface IVistor làm đối số.

using System;
using System.Collections.Generic;
using System.Text;

namespace VisitorDesignPattern
{
    public interface IElement
    {
        void Accept(IVisitor visitor);
    }
}

Bước 2: Tạo class Kid.

Class này thực hiện phương thức Accept() được xác định bởi interface IElement.

using System;
using System.Collections.Generic;
using System.Text;

namespace VisitorDesignPattern
{
    public class Kid : IElement
    {
        public string KidName { get; set; }

        public Kid(string name)
        {
            KidName = name;
        }

        public void Accept(IVisitor visitor)
        {
            visitor.Visit(this);
        }
    }
}

Bước 3: Tạo interface IVisitor.

Trong class này khai báo một phương thức Visit() nhận interface IElement làm đối số.

using System;
using System.Collections.Generic;
using System.Text;

namespace VisitorDesignPattern
{
    public interface IVisitor
    {
        void Visit(IElement element);
    }
}

Bước 4: Tạo class Doctor.

Class này thực hiện từng thao tác được khai báo bởi interface IVisitor. Mỗi hoạt động thực hiện một phân đoạn của thuật toán cần thiết cho đối tượng đó.

using System;
using System.Collections.Generic;
using System.Text;

namespace VisitorDesignPattern
{
    public class Doctor : IVisitor
    {
        public string Name { get; set; }
        public Doctor(string name)
        {
            Name = name;
        }

        public void Visit(IElement element)
        {
            Kid kid = (Kid)element;
            Console.WriteLine("Doctor: " + this.Name + " did the health checkup of the child: " + kid.KidName);
        }
    }
}

Bước 5: Tạo class Saleman.

Class này cũng thực hiện các thao tác được xác định bởi interface IVistor.

using System;
using System.Collections.Generic;
using System.Text;

namespace VisitorDesignPattern
{
    class Salesman : IVisitor
    {
        public string Name { get; set; }
        public Salesman(string name)
        {
            Name = name;
        }
        public void Visit(IElement element)
        {
            Kid kid = (Kid)element;
            Console.WriteLine("Salesman: " + this.Name + " gave the school bag to the child: "
                            + kid.KidName);
        }
    }
}

Bước 6: Tạo class School.

Trong class này có thể liệt kê các phần tử của nó và cung cấp một interface để cho phép Visitor truy cập vào các phần tử của nó.

using System;
using System.Collections.Generic;
using System.Text;

namespace VisitorDesignPattern
{
    public class School
    {
        private static List<IElement> elements;
        static School()
        {
            elements = new List<IElement>
            {
                new Kid("Ram"),
                new Kid("Sara"),
                new Kid("Pam")
            };
        }
        public void PerformOperation(IVisitor visitor)
        {
            foreach (var kid in elements)
            {
                kid.Accept(visitor);
            }
        }
    }
}

Bước 7: Tạo class Program để chạy chương trình và kiểm tra kết quả.

using System;

namespace VisitorDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            School school = new School();
            var visitor1 = new Doctor("James");
            school.PerformOperation(visitor1);
            Console.WriteLine();
            var visitor2 = new Salesman("John");
            school.PerformOperation(visitor2);

            Console.WriteLine("n-------------------------------!");
            Console.WriteLine("Chuong trinh nay duoc dang tai Kiso.vn");
            Console.Read();
            
        }
    }
}

Kết quả:

visitor 02 png

Như vậy là chúng ta đã tìm hiểu xong về Visitor Design Pattern trong C# – Cách triển khai và một vài ví dụ về nó. Ở bài tiếp theo mình sẽ giới thiệu về Strategy Design Pattern trong C#.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *