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

Ngày đăng: 2023-05-06 05:44:15

Mục lục

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

2.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ố.

IElement.cs

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.

Kid.cs

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

IVisitor.cs

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 đó.

Doctor.cs

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.

Salesman.cs

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

School.cs

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

Program.cs

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 thuanhoaonline.com");

            Console.Read();

             

        }

    }

}

Kết quả:

 

Về bài trước...

                                  Bài tiếp theo...


Tài liệu lập trình C#

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12725