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

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

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

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

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 Freetuts.net");
            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#.

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ụ

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ụ

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

Observer 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