Rumah > Java > javaTutorial > teks badan

Memahami Corak Reka Bentuk Memento di Jawa

王林
Lepaskan: 2024-07-24 16:06:57
asal
446 orang telah melayarinya

Understanding the Memento Design Pattern in Java

Masalah

Corak Memento menangani keperluan untuk menangkap dan memulihkan keadaan dalaman objek tanpa melanggar enkapsulasinya. Ini berguna dalam senario di mana anda ingin melaksanakan fungsi buat asal/buat semula, membenarkan objek untuk kembali kepada keadaan sebelumnya.

Penyelesaian

Corak Memento melibatkan tiga komponen utama:

  1. Pemula: Objek yang keadaan dalamannya perlu disimpan dan dipulihkan.
  2. Memento: Objek yang menyimpan keadaan dalaman pemula. Kenang-kenangan itu tidak boleh diubah.
  3. Penjaga: Bertanggungjawab untuk meminta pemula menyelamatkan atau memulihkan keadaannya daripada kenang-kenangan.

Pencipta mencipta kenang-kenangan yang mengandungi petikan keadaan semasanya. Kenang-kenangan ini kemudiannya boleh disimpan oleh penjaga dan digunakan untuk memulihkan keadaan pemula apabila diperlukan.

Kebaikan dan Keburukan

Kebaikan

  • Memelihara Enkapsulasi: Membenarkan keadaan dalaman objek disimpan dan dipulihkan tanpa mendedahkan butiran pelaksanaannya.
  • Buat Asal/Buat Semula Mudah: Memudahkan pelaksanaan kefungsian buat asal/buat semula, menjadikan sistem lebih teguh dan mesra pengguna.
  • Sejarah Negeri: Membenarkan mengekalkan sejarah keadaan objek sebelumnya, membolehkan navigasi antara keadaan berbeza.

Kontra

  • Penggunaan Memori: Menyimpan berbilang kenang-kenangan boleh menggunakan memori yang ketara, terutamanya jika keadaan objek itu besar.
  • Kerumitan Tambahan: Memperkenalkan kerumitan tambahan kepada kod, dengan keperluan untuk mengurus penciptaan dan pemulihan cenderamata.
  • Tanggungjawab Penjaga: Penjaga perlu menguruskan cenderahati dengan cekap, yang boleh menambah tanggungjawab dan kerumitan kepada sistem.

Contoh Aplikasi Dunia Sebenar

Contoh praktikal corak Memento adalah dalam editor teks yang menawarkan fungsi buat asal/buat semula. Setiap perubahan pada dokumen boleh disimpan sebagai kenang-kenangan, membolehkan pengguna kembali ke keadaan dokumen sebelumnya seperti yang diperlukan.

Contoh Kod dalam Java

Corak kenang-kenangan dalam kod:

// Originator
public class Editor {
    private String content;

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

    public String getContent() {
        return content;
    }

    public Memento save() {
        return new Memento(content);
    }

    public void restore(Memento memento) {
        content = memento.getContent();
    }

    // Memento
    public static class Memento {
        private final String content;

        public Memento(String content) {
            this.content = content;
        }

        private String getContent() {
            return content;
        }
    }
}

// Caretaker
public class History {
    private final Stack<Editor.Memento> history = new Stack<>();

    public void save(Editor editor) {
        history.push(editor.save());
    }

    public void undo(Editor editor) {
        if (!history.isEmpty()) {
            editor.restore(history.pop());
        }
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        Editor editor = new Editor();
        History history = new History();

        editor.setContent("Version 1");
        history.save(editor);
        System.out.println(editor.getContent());

        editor.setContent("Version 2");
        history.save(editor);
        System.out.println(editor.getContent());

        editor.setContent("Version 3");
        System.out.println(editor.getContent());

        history.undo(editor);
        System.out.println(editor.getContent());

        history.undo(editor);
        System.out.println(editor.getContent());
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Memahami Corak Reka Bentuk Memento di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!