State Design Pattern

GOF Intent:
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class;

در اين Pattern امکان اين را فراهم مي کند که رفتار، يا State يک Object را در زمان اجرا تغيير دهيم. در اينجا هر رفتار در يک کلاس State نگهداري مي شود و با تغيير آن مي توان رفتار يا state کلاس را تغيير داد.


اين Pattern شباهت زيادي با Strategy Pattern دارد.

نمونه کد:

فرض کنيد در يک بازي کامپيوتري يک جنگجو يا Warrior داريم که پس از جنگيدن حين اجرا، توان او بين Strong و Normal و Weak تغيير مي کند:

public interface IHealth {
   public void doBattle(Warrior w);
   public void showHealth();
}


public class Normal implements IHealth{

   public void doBattle(Warrior w) {
      w.setHealth(new Weak());
   }

   public void showHealth() {
      System.out.println(“Warrior is Normal”);
   }
}


public class Strong implements IHealth{
   public void doBattle(Warrior w) {
      w.setHealth(new Normal());
   }

   public void showHealth() {
      System.out.println(“Warrior is Strong”);
   }
}


public class Weak implements IHealth{
   public void doBattle(Warrior w) {
      w.setHealth(new Strong());
   }

   public void showHealth() {
      System.out.println(“Warrior is Weak”);
   }
}


public class Warrior {
   private IHealth health = new Strong();

   public void setHealth(IHealth h){
      health = h;
   }

   public void showHealth(){
      health.showHealth();
   }

   public void battle(){
      health.doBattle(this);
   }
}


public static void main(String[] args) {
   Warrior w = new Warrior();
      w.showHealth();
      w.battle();
      w.showHealth();
      w.battle();
      w.showHealth();
}

نکته:
State Object ها معمولا Singleton هستند.



منبع ها:

  1. Design Patterns – Elements of Reusable Object Oriented Software (GOF) By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  2. State in Devlake
  3. State in Wikipedia

پست شده در Design Pattern

پاسخ دهید

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

*


هشت × 6 =

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

تماس با من: admin@paspars.com