آموزش الگوهای طراحی

Design Pattern - الگوی Memento

الگوی Memento، برای برگرداندن وضعیت یک شیء به وضعیت قبلی استفاده میشه. الگوی Memento، زیرگروهِ الگوی رفتاری (behavioral) محسوب میشه.

پیاده سازی

الگوی Memento از کلاس های actor استفاده می کنه. Memento حاویِ وضعیتی از شیء است که قراره برگردانده بشه. کلاس Originator وضعیت ها را در اشیاءِ Memento ایجاد و ذخیره می کنه و شیءِ Caretaker، مسئول بازگرداندن وضعیت شیء از Memento است. کلاس های Memento، Originator و Caretaker را ایجاد می کنیم.

MementoPatternDemo، در نسخه ی آزمایشیِ کلاسمان، از اشیاء CareTaker و Originator برای بازگرداندنِ وضعیت های اشیاء استفاده خواهیم کرد.

memento pattern uml diagram

مرحله ی 1

ایجاد کلاسِ Memento.

Memento.java

public class Memento {
   private String state;

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

   public String getState(){
      return state;
   }	
}

مرحله ی 2

ایجاد کلاسِ Originator.

Originator.java

public class Originator {
   private String state;

   public void setState(String state){
      this.state = state;
   }

   public String getState(){
      return state;
   }

   public Memento saveStateToMemento(){
      return new Memento(state);
   }

   public void getStateFromMemento(Memento Memento){
      state = Memento.getState();
   }
}

مرحله ی 3

ایجاد کلاس CareTaker.

CareTaker.java

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

public class CareTaker {
   private List<Memento> mementoList = new ArrayList<Memento>();

   public void add(Memento state){
      mementoList.add(state);
   }

   public Memento get(int index){
      return mementoList.get(index);
   }
}

مرحله ی 4

استفاده از اشیاءِ CareTaker و Originator.

MementoPatternDemo.java

public class MementoPatternDemo {
   public static void main(String[] args) {
   
      Originator originator = new Originator();
      CareTaker careTaker = new CareTaker();
      
      originator.setState("State #1");
      originator.setState("State #2");
      careTaker.add(originator.saveStateToMemento());
      
      originator.setState("State #3");
      careTaker.add(originator.saveStateToMemento());
      
      originator.setState("State #4");
      System.out.println("Current State: " + originator.getState());		
      
      originator.getStateFromMemento(careTaker.get(0));
      System.out.println("First saved State: " + originator.getState());
      originator.getStateFromMemento(careTaker.get(1));
      System.out.println("Second saved State: " + originator.getState());
   }
}

مرحله ی 5

بررسی خروجی

Current State: State #4
First saved State: State #2
Second saved State: State #3
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

سوال شما با موفقیت ثبت شد. برای اینکه بتوانیم به شما اطلاع رسانی کنیم، موارد زیر را وارد کنید:

لطفا چند لحظه منتظر بمانید ...