2k1
  • Home
  • Programming
  • System
  • Design
  • Applications
  • Tech
No Result
View All Result
  • Login
2k1
  • Home
  • Programming
  • System
  • Design
  • Applications
  • Tech
No Result
View All Result
2k1
No Result
View All Result

Design Patterns – Memento Pattern

Nguyen Pham by Nguyen Pham
16/05/2023
in Design Patterns
Reading Time: 3 mins read
A A
0

Giới thiệu

Memento Pattern là một kiểu thiết kế trong lập trình hướng đối tượng (Object-Oriented Programming) cho phép bạn lưu lại trạng thái của một đối tượng và sau đó phục hồi trạng thái đó một cách dễ dàng. Điều này cho phép bạn tái sử dụng trạng thái cũ của đối tượng mà không cần phải tìm hiểu lại tất cả thông tin về nó.

Các bước chính để áp dụng Memento pattern là:

  1. Tạo một đối tượng để lưu trạng thái của đối tượng khác, gọi là “Memento”.
  2. Tạo một đối tượng “Caretaker” để quản lý các Mementovà chịu trách nhiệm phục hồi trạng thái của đối tượng.
  3. Khi cần lưu trạng thái của đối tượng, hãy tạo một Momento và gửi nó đến Caretaker.
  4. Khi cần phục hồi trạng thái, hãy yêu cầu Caretaker trả lại Mementotương ứng và sử dụng nó để khôi phục trạng thái của đối tượng.

Momento Pattern cung cấp một cách linh hoạt và dễ dàng để quản lý trạng thái của một đối tượng và phục hồi nó.

Code

Bước 1. Tạo class memento

EditorState.java

package momento;

// Momento class
// Class để lưu trữ trạng thái đối tượng khác
public class EditorState {
    private final String content; // State của class Originator

    // constructor
    public EditorState(String content) {
        this.content = content;
    }
    public String getContent() {
        return content;
    }

}

Bước 2. Tạo class Originator

Editor.java

package momento;

// Originator class
public class Editor {
    private String content; // state

    // CreateMemento object -> use Memento Class
    public EditorState createState(){
        return new EditorState(content);
    }

    // setMemento
    public void restore(EditorState state){
        content = state.getContent();
    }


    // State get/set
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

Bước 3. Tạo class CareTaker

History.java

package momento;

import java.util.ArrayList;
import java.util.List;

// Caretaker
public class History {
    private List<EditorState> states = new ArrayList<>(); // Lưu trữ lại lịch sử

    // Push state -> Memento
    public void push(EditorState state){
        states.add(state);
    }


    // Pop state
    public EditorState pop(){
        var lastIndex = states.size() - 1;
        var lastState = states.get(lastIndex);
        states.remove(lastState);
        return  lastState;

    }
}

Bước 4. Sử dụng

Main.java

package momento;

public class Main {
    public static void main(String[] args) {
        var editor = new Editor(); // create originator
        var history  = new History(); // create caretaker

        editor.setContent("a"); // update state originator
        history.push(editor.createState()); // create momento sau đó gửi tới caretaker

        editor.setContent("b");
        history.push(editor.createState());

        editor.setContent("c");
        editor.restore(history.pop()); // restore state: Yêu cầu caretaker trả về một object momento(EditorState) rồi sau đó update lại vào originator class

        System.out.println(editor.getContent()); // output: b

    }
}

Tags: design-pattern
Previous Post

Cách tạo tài khoản ChatGPT

Next Post

Giới thiệu Docker

Related Posts

No Content Available
Load More
Next Post
Giới thiệu Docker

Giới thiệu Docker

Please login to join discussion
Stock

Phân tích mã cổ phiếu VCB

by Nguyen Pham
26/04/2025
0

Phân tích mã cổ phiếu VCB (Ngân hàng TMCP Ngoại thương Việt Nam - Vietcombank) 1. Tổng quan về Vietcombank...

Read more

Facebook, Instagram bất ngờ sập trên diện rộng, liên tục đăng xuất người dùng!

05/03/2024
Xây dựng todo app với smartcontract

Web3 là gì?

30/06/2023
Xây dựng todo app với smartcontract

Giới thiệu về đa luồng trong ngôn ngữ lập trình go có code minh họa.

29/06/2023

Chạy ứng dụng react native đầu tiên của bạn

29/06/2023

@2021 2k1.org [email protected]

No Result
View All Result
  • Home
  • Review
  • Applications
  • Computers
  • Gaming
  • Microsoft

© 2021 NData

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In