design pattern, java, جاوا, دیزاین پترن

Memento پترن در جاوا (Memento Pattern in Java)

Memento پترن در جاوا

در این قسمت تیم کدگیت را با آموزش Memento پترن در جاوا همراهی کنید. ابتدا این آموزش را با یادآوری Behavioral Design Pattern آغاز و در ادامه Memento پترن را توضیح می‌دهیم. در انتها، یک مثال را با استفاده از این پترن پیاده سازی خواهیم کرد. پیش نیاز این آموزش شامل موارد زیر است:

  1. شی گرایی در جاوا
  2. متد در جاوا
  3. Constructor در جاوا
  4. This در جاوا
  5. ArrayList در جاوا

Behavioral Design Pattern

یکی از زیر شاخه‌های دیزاین پترن Behavioral Design Pattern می‌باشد. یکی از وظایف اصلی این دیزاین پترن، تعامل اشیا و جداسازی وظایف آنها با یکدیگر است. تعریف کامل Behavioral Design Pattern بدین صورت است که، تمامی اشیا با یکدیگر به راحتی بتوانند ارتباط برقرار کرده، بدون آنکه باعث وابستگی بین آنها شود.

Memento پترن در جاوا

Memento پترن زمانی استفاده می‌شود که بخواهیم وضعیت یک شی را ذخیره کنیم تا بتوانیم آن را به حالت قبل بازگردانیم. در دنیای واقعی این پترن مانند یک یادآور یا reference است برای اینکه یک چیز (شی) چگونه باید باشد. به عنوان مثال اگر تصمیم به جایگرینی قطعات یک تلفن را دارید شاید از یک تلفن از همان نوع به عنوان مرجع استفاده کنید تا مطمئن شوید تلفن شما دقیقا به حالت قبل بر‌میگردد.

مثال Memento پترن در جاوا

برای پیاده سازی پترن Memento به سه بازیگر نیاز داریم. در مثال این جلسه Memento، Originator و CareTaker کلاس‌های ما هستند. کلاس Memento وضعیت شی را نگهداری میکند تا در صورت لزوم بازگردانی شود. کلاس Originator وظیفه ساخت شی و نگهداری آن با استفاده از کلاس Memento را دارد. در آخر وظیفه کلاس CareTaker، بازگردانی وضعیت قبلی به کمک کلاس Memento است. کد کلاس‌های معرفی شده به صورت زیر می‌باشند:

public class Memento {

     private String state;



     public Memento(String state) {

          this.state = state;

     }



     public String getState() {

          return state;

     }

}
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();

     }

}
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);

     }

}

در کلاس Orginator متد saveStateToMemento برای ذخیره وضعیت فعلی در Momento بوده و متد getStateFromMemento برای دریافت وضعیت ذخیره شده استفاده می‌شود.

تست مثال Memento پترن در جاوا

برای تست کدهای بالا، کد Main زیر را بزنید:

 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());

     }

همانطور که در کد Main بالا می‌بینید با استفاده از کلاس Orginator چندین State (وضعیت) را ایجاد کرده و نام آنها را State #1 و …. قرار دادیم. بعضی از Stateها را در Memento ذخیره کرده و در آخر با استفاده از کلاس CareTaker وضعیت‌های قبلی را بازگردانی کردیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *