Memento design pattern'ini bir aptala anlatır gibi Java ile anlatır mısın?



Tabii ki! Memento tasarım deseni, bir nesnenin durumunu bir noktada kaydetmeye ve daha sonra o duruma geri dönmeye olanak tanır. Java'da bunu basit bir örnek ile açıklayalım:


Memento Sınıfı: Bu, nesnenin durumunu saklayan sınıftır.

Originator Sınıfı: Bu, durumu değişen ve Memento'yu kullanarak durumunu kaydeden sınıf.

Caretaker Sınıfı: Bu, Memento'ları saklar ve gerektiğinde Originator'a geri yükler.

Örnek Senaryo: Diyelim ki bir TextEditor sınıfımız var ve yazılan metni kaydetmek istiyoruz. Bu metin, geri yüklemek istediğimiz durumdur.


java

Copy code

// Memento Sınıfı

class TextEditorMemento {

    private String state;


    public TextEditorMemento(String state){

        this.state = state;

    }


    public String getState(){

        return state;

    }

}


// Originator Sınıfı

class TextEditor {

    private String text;


    public void setText(String text){

        this.text = text;

    }


    public String getText(){

        return text;

    }


    public TextEditorMemento saveToMemento(){

        return new TextEditorMemento(text);

    }


    public void restoreFromMemento(TextEditorMemento memento){

        text = memento.getState();

    }

}


// Caretaker Sınıfı

class Caretaker {

    private List<TextEditorMemento> mementoList = new ArrayList<>();


    public void addMemento(TextEditorMemento memento){

        mementoList.add(memento);

    }


    public TextEditorMemento getMemento(int index){

        return mementoList.get(index);

    }

}


// Ana sınıf

public class Main {

    public static void main(String[] args) {

        TextEditor editor = new TextEditor();

        Caretaker caretaker = new Caretaker();


        editor.setText("Version 1");

        caretaker.addMemento(editor.saveToMemento());

        

        editor.setText("Version 2");

        caretaker.addMemento(editor.saveToMemento());


        editor.setText("Version 3");


        // Geri yükleme

        editor.restoreFromMemento(caretaker.getMemento(1)); // "Version 2" geri yüklendi

        System.out.println(editor.getText()); // Çıktı: Version 2

    }

}

Bu örnekte, TextEditor sınıfı yazılan metni saklar ve bu metni TextEditorMemento nesnesi olarak kaydedebilir. Caretaker sınıfı, bu Memento nesnelerini saklar. Böylece, metin her değiştiğinde, yeni bir durum Caretaker içinde saklanır ve istediğimiz zaman bu durumlardan birine geri dönebiliriz.



Avantajları ve Dezavantajları


Memento tasarım deseninin avantajları ve dezavantajları şöyle özetlenebilir:


Avantajları

Encapsulation Koruma: Memento deseni, nesnenin iç durumunu dışarıya açmadan, durumun kaydedilmesine ve geri yüklenmesine izin verir. Bu, nesne yönetimini ve güvenliğini artırır.


Geriye Dönük Uyumluluk: Nesnelerin önceki durumlarına geri dönebilme yeteneği, geriye dönük uyumluluğu ve hata düzeltmeyi kolaylaştırır.


Anlık Görüntü Yönetimi: Uygulamanın herhangi bir noktasında nesnenin anlık görüntüsünü almak ve gerektiğinde bu duruma geri dönmek mümkündür.


Daha Temiz Ana Nesneler: Memento deseni, durum yönetimi ve saklama işlevlerini ayrı nesnelerde tutarak ana nesneleri daha basit ve temiz tutar.


Undo/Redo İşlevselliği: Özellikle kullanıcı arayüzü uygulamalarında, kullanıcıların eylemlerini geri almak veya yeniden yapmak için kullanışlıdır.


Dezavantajları

Yüksek Bellek Kullanımı: Eğer saklanan durumlar büyükse veya çok sık saklama işlemi yapılıyorsa, bu, bellek kullanımını artırabilir.


Karmaşıklık: Sistem karmaşıklaşabilir, özellikle çok sayıda memento oluşturuluyorsa ve bunların yönetimi zorlaşıyorsa.


Performans Sorunları: Nesnelerin durumlarını sık sık kaydetmek ve geri yüklemek sistem performansını olumsuz etkileyebilir.


Sürdürülebilirlik Sorunları: Uzun süreli projelerde, nesnelerin durumlarını saklamak ve yönetmek zamanla zorlaşabilir, özellikle nesnelerin yapısı zaman içinde değişirse.


Güvenlik Riskleri: Eğer memento nesneleri hassas veriler içeriyorsa ve bu verilerin güvenliği yeterince sağlanmazsa, güvenlik açıklarına yol açabilir.


Memento deseni, doğru durumlarda kullanıldığında çok faydalı olabilir, ancak kullanımı ve uygulanması dikkatle değerlendirilmelidir.

Please Select Embedded Mode To Show The Comment System.*

Daha yeni Daha eski

نموذج الاتصال