Ngày đăng: 2023-05-06 05:33:14
Mục lục
1.Command Design Pattern trong C# là gì?
Command Design Pattern được sử dụng để đóng gói một yêu cầu dưới dạng một đối tượng và chuyển cho người gọi nó.
Trong đó người gọi biết cách thực hiện yêu cầu nhưng sử dụng command được đóng gói để thực hiện một hành động.
Ví dụ: Để hiểu rõ hơn về Command Design Pattern, mình sẽ lấy ví dụ trong nhà hàng.
Trong một nhà hàng ta có người phục vụ, đầu bếp. Người phục vụ sẽ nhận đơn hàng từ khách hàng và chuyển đến cho đầu bếp. Đầu bếp sẽ nấu những món ăn đó và chuyển lại cho phục vụ rồi phục vụ đưa cho khách hàng.
Trong đó:
- Client: là khách hàng.
- Command: Hành động gọi món.
- Invoker: Người phục vụ.
2.Cách triển khai và ví dụ về Command Design Pattern trong C#
Trong phần này mình sẽ thực hiện triển khai Command Design Pattern trong C# thông qua một ví dụ cụ thể. Các bạn hãy xem qua các bước mình thực hiện nhé !
Bước 1: Tạo class Document.
Trong class có ba phương thức: Open()
, Save()
, Close()
tương ứng với nhiệm vụ của nó.
Document.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CommandDesignPattern
{
public class Document
{
public void Open()
{
Console.WriteLine( "Document Opened" );
}
public void Save()
{
Console.WriteLine( "Document Saved" );
}
public void Close()
{
Console.WriteLine( "Document Closed" );
}
}
}
|
Bước 2: Tạo interface ICommand.
Trong class này ta khai báo một phương thức Excute()
được sử dụng để thực thi một command.
ICommand.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CommandDesignPattern
{
public interface ICommand
{
void Execute();
}
}
|
Bước 3: Tạo các command Open, Save, Close.
OpenCommand.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CommandDesignPattern
{
public class OpenCommand : ICommand
{
private Document document;
public OpenCommand(Document doc)
{
document = doc;
}
public void Execute()
{
document.Open();
}
}
}
|
SaveCommand.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CommandDesignPattern
{
class SaveCommand : ICommand
{
private Document document;
public SaveCommand(Document doc)
{
document = doc;
}
public void Execute()
{
document.Save();
}
}
}
|
CloseCommand.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CommandDesignPattern
{
class CloseCommand : ICommand
{
private Document document;
public CloseCommand(Document doc)
{
document = doc;
}
public void Execute()
{
document.Close();
}
}
}
|
Bước 4: Tạo class MenuOptions.
Trong class thực hiện gọi phương thức Excute()
để thực thi command.
MenuOptions.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CommandDesignPattern
{
public class MenuOptions
{
private ICommand openCommand;
private ICommand saveCommand;
private ICommand closeCommand;
public MenuOptions(ICommand open, ICommand save, ICommand close)
{
this .openCommand = open;
this .saveCommand = save;
this .closeCommand = close;
}
public void clickOpen()
{
openCommand.Execute();
}
public void clickSave()
{
saveCommand.Execute();
}
public void clickClose()
{
closeCommand.Execute();
}
}
}
|
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 CommandDesignPattern
{
class Program
{
static void Main( string [] args)
{
Document document = new Document();
ICommand openCommand = new OpenCommand(document);
ICommand saveCommand = new SaveCommand(document);
ICommand closeCommand = new CloseCommand(document);
MenuOptions menu = new MenuOptions(openCommand, saveCommand, closeCommand);
menu.clickOpen();
menu.clickSave();
menu.clickClose();
Console.WriteLine( "\n----------------------------------" );
Console.WriteLine( "Chuong trinh nay duoc dang tai thuanhoaonline.com" );
Console.ReadKey();
}
}
}
|