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

Interpreter 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 Interpreter Design Pattern trong C# - Cách triển khai và ví dụ. Đây là một loại 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ề Interpreter Design Pattern là gì? Cách triển khai và một vài ví dụ cụ thể về nó trong C#.

Interpreter Design Pattern trong C# là gì?

Interpreter Design Pattern cung cấp một cách để đánh giá về ngữ pháp hoặc cách diễn giải của ngôn ngữ. Loại pattern này được sử dụng trong phân tích cú pháp SQL, công cụ xử lý ký hiệu, ... .

interpreter 02 png

Để hiểu rõ hơn về đinh nghĩa trên, các bạn hãy xem qua ví dụ dưới đây.

Bài viết này được đăng tại [free tuts .net]

interpreter 01 png

Như các bạn thấy ở hình trên, chúng ta có Current Date (ngày hiện tại) là ngày 18-06-2022. Với ngày hiện tại này, ta có thể diễn đạt dưới nhiều dạng biểu thức khác nhau như: MM-DD-YYYY, DD-MM-YYYY, ... .

Giả sử, chúng ta muốn ngày ở định dạng MM-DD-YYY thì việc cần làm là chuyển giá trị và biểu thức ngày bạn muốn (tức MM-DD-YYYY) cho trình thông dịch. Những gì trình thông dịch sẽ làm là chuyển đổi giá trị thành định dạng bạn vừa chuyển cho nó.

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

Trong phần này mình sẽ thực hiện triển khai Interpreter Design Pattern trong C# thông qua một ví dụ cụ thể. 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 class Context.

Trong class này chưa ngày (tức là ngày - giờ hiện tại) mà chúng ta muốn diễn giải.

Context.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace InterpreterDesignPattern
{
    public class Context
    {
        public string expression { get; set; }
        public DateTime date { get; set; }
        public Context(DateTime date)
        {
            this.date = date;
        }
    }
}

Bước 2: Tạo interface AbstractExpression.

Class này xác định phương thức sẽ được thực hiện bởi các class con. Hơn nữa, phương thức lấy đối tượng Context làm đối số. Đối tượng Context này giữ giá trị mà chúng ta muốn diễn giải.

AbstractExpression.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace InterpreterDesignPattern
{
    public interface AbstractExpression
    {
        void Evaluate(Context context);
    }
}

Bước 3: Tạo lần lượt các class DayExpression, MonthExpression, YearExpression, SeparatorExpression.

Đây sẽ là các class triển khai interface AbstractExpression.

DayExpression.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace InterpreterDesignPattern
{
    public class DayExpression : AbstractExpression
    {
        public void Evaluate(Context context)
        {
            string expression = context.expression;
            context.expression = expression.Replace("DD", context.date.Day.ToString());
        }
    }
}
MonthExpression.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace InterpreterDesignPattern
{
    public class MonthExpression : AbstractExpression
    {
        public void Evaluate(Context context)
        {
            string expression = context.expression;
            context.expression = expression.Replace("MM", context.date.Month.ToString());
        }
    }
}
YearExpression.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace InterpreterDesignPattern
{
    public class YearExpression : AbstractExpression
    {
        public void Evaluate(Context context)
        {
            string expression = context.expression;
            context.expression = expression.Replace("YYYY", context.date.Year.ToString());
        }
    }
}
SeparatorExpression.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace InterpreterDesignPattern
{
    class SeparatorExpression : AbstractExpression
    {
        public void Evaluate(Context context)
        {
            string expression = context.expression;
            context.expression = expression.Replace(" ", "-");
        }
    }
}

Bước 4: Tạo client.

Trong phần này chúng ta yêu cầu người dùng chọn định dạng ngày và sau đó sẽ hiện thị ngày dưới định dạng đó.

Program.cs
using System;
using System.Collections.Generic;

namespace InterpreterDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            List<AbstractExpression> objExpressions = new List<AbstractExpression>();
            Context context = new Context(DateTime.Now);
            Console.WriteLine("Please select the Expression  : MM DD YYYY or YYYY MM DD or DD MM YYYY ");
            context.expression = Console.ReadLine();
            string[] strArray = context.expression.Split(' ');
            foreach (var item in strArray)
            {
                if (item == "DD")
                {
                    objExpressions.Add(new DayExpression());
                }
                else if (item == "MM")
                {
                    objExpressions.Add(new MonthExpression());
                }
                else if (item == "YYYY")
                {
                    objExpressions.Add(new YearExpression());
                }
            }
            objExpressions.Add(new SeparatorExpression());
            foreach (var obj in objExpressions)
            {
                obj.Evaluate(context);
            }
            Console.WriteLine(context.expression);

            Console.WriteLine("\n-----------------------------------------");
            Console.WriteLine("Chuong trinh nay duoc dang tai Freetuts.net");
            Console.Read();
            
        }
    }
}

Kết quả:

interpreter 03 png

Như vậy là chúng ta đã cùng nhau tìm hiểu về Interpreter Desgin 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 Mediator 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ụ

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ụ

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