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

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

Memento Design Pattern trong C# là gì?

Memento Design Pattern được sử dụng để khôi phục một đối tượng về trạng thái trước đó của nó.

memento 02 png

Điều đó có nghĩa là nếu bạn muốn thực hiện một số loại hoạt động hoàn tác, khôi phục trong ứng dụng thì có thể sử dụng Memento Design Pattern.

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

Một Memento Design Pattern có các phần sau đây:

  • Originator: Là đối tượng chịu trách nhiệm khôi phục trạng thái trước đó.
  • Memento: Nó giữ trạng thái bên trong của một Originator.
  • Caretaker: Có trách nhiệm giữ các mementos.

Để hiểu rõ hơn, mình có một ví dụ cụ thể dưới đây.

memento 01 png

Như các bạn thấy ở hình trên đây, mình có một nhân viên tên là Quyền, có ID 101 và mức lương là 2000$. Bây giờ mình sẽ thay đổi lương thành 3000$.

Sau một thời gian cảm thấy không hợp lệ, mình muốn cho nó quay lại trạng thái ban đầu. Khi đó sẽ sử dụng Memento Design Pattern để làm chuyện này.

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

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

Bước 1: Tạo class LEDTV.

Trong class này có ba thuộc tính: Size, Price, USBSupport. Sau đó khởi tạo constructor LEDTV với ba thuộc tính trên. Trong class này có thêm phương thức GetDetails() để trả về chi tiết các thông tin của TV LED.

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

namespace MementoDesignPattern
{
    public class LEDTV
    {
        public string Size { get; set; }
        public string Price { get; set; }
        public bool USBSupport { get; set; }
        public LEDTV(string Size, string Price, bool USBSupport)
        {
            this.Size = Size;
            this.Price = Price;
            this.USBSupport = USBSupport;
        }
        public string GetDetails()
        {
            return "LEDTV [Size=" + Size + ", Price=" + Price + ", USBSupport=" + USBSupport + "]";
        }
    }
}

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

Class này được sử dụng để lưu giữ trạng thái bên trong của trình khởi tạo.

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

namespace MementoDesignPattern
{
    public class Memento
    {
        public LEDTV ledTV { get; set; }
        public Memento(LEDTV ledTV)
        {
            this.ledTV = ledTV;
        }
        public string GetDetails()
        {
            return "Memento [ledTV=" + ledTV.GetDetails() + "]";
        }
    }
}

Bước 3: Tạo class CareTaker.

Được sử dụng để duy trì các mementos object.

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

namespace MementoDesignPattern
{
    public class Caretaker
    {
        private List<Memento> ledTvList = new List<Memento>();
        public void AddMemento(Memento m)
        {
            ledTvList.Add(m);
            Console.WriteLine("LED TV's snapshots Maintained by CareTaker :" + m.GetDetails());
        }
        public Memento GetMemento(int index)
        {
            return ledTvList[index];
        }
    }
}

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

Trong class có phương thức CreateMemento() được sử dụng để thiết lập trạng thái bên trong đối tượng Memento. Phương thức SetMementor()được sử dụng để khôi phục trạng thái.

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

namespace MementoDesignPattern
{
    public class Originator
    {
        public LEDTV ledTV;

        public Memento CreateMemento()
        {
            return new Memento(ledTV);
        }
        public void SetMemento(Memento memento)
        {
            ledTV = memento.ledTV;
        }
        public string GetDetails()
        {
            return "Originator [ledTV=" + ledTV.GetDetails() + "]";
        }
    }
}

Bước 5: Tạo client.

Trong class này chúng ta sẽ truyền các thông tin chi tiết, sau đó hiển thị và kiểm tra kết quả.

Program.cs
using System;

namespace MementoDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Originator originator = new Originator();
            originator.ledTV = new LEDTV("42 inch", "60000Rs", false);

            Caretaker caretaker = new Caretaker();
            caretaker.AddMemento(originator.CreateMemento());
            originator.ledTV = new LEDTV("46 inch", "80000Rs", true);
            caretaker.AddMemento(originator.CreateMemento());
            originator.ledTV = new LEDTV("50 inch", "100000Rs", true);

            Console.WriteLine("\nOrignator current state : " + originator.GetDetails());
            Console.WriteLine("\nOriginator restoring to 42 inch LED TV");
            originator.ledTV = caretaker.GetMemento(0).ledTV;
            Console.WriteLine("\nOrignator current state : " + originator.GetDetails());

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

Kết quả:

memento 03 png

Như vậy là chúng ta đã cùng nhau tìm hiểu về Memento Design Pattern trong C# - Cách triển khai và ví dụ cụ thể về nó. Đây cũng là loại pattern cuối cùng trong nhóm Behavioral Design Pattern mà mình muốn giới thiệu, cảm ơn các bạn đã theo dõi !!!

Cùng chuyên mục:

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ụ

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