Latest web development tutorials

паттерн состояние

В режиме государственного (государственного образца), поведение класса основывается на его статус изменился. Этот тип шаблонов проектирования относятся поведенческие модели.

В государственной модели, мы создаем объекты и различные поведенческие состояний наряду с состоянием объекта изменяется измененном представления контекста объекта.

введение

Намерение: Позволяет объекту изменять свое поведение во внутреннем состоянии изменяется, то объект появляется , чтобы изменить свой класс.

Главным образом решить: поведение объекта зависит от его состояния (атрибутов), и вы можете изменить его в соответствии с его государством , связанные с изменением поведения.

Когда использовать: Код содержит большое количество объектов , связанных со статусом условных операторов.

Как исправить: статус конкретных классов абстрактных вне.

Ключевой код: режим командного интерфейса , как правило , только один метод.Статус интерфейса, в котором один или несколько методов. Кроме того, метод государственного режима класса реализации, как правило, возвращаемого значения, или изменить значение переменной экземпляра. То есть, состояние и состояние объектной модели, как правило, актуальны. Методы класса реализации имеют различные функции, методы интерфейса охвачены. Режим Состояние и командный режим то же самое может быть использован для устранения других условий, если ... Else выбор.

Примеры применения: 1, играть в баскетбол игрок может иметь нормальное состояние, а не нормальное состояние и ненормальное состояние.2, маркиза Yi Цзэн колокола, то 'часы абстрактный интерфейс', 'часы А' и другие конкретные состояния, специфическая среда '' китайские колокола (контекст).

Преимущества: 1, инкапсулирует правила преобразования.2, перечислить возможные состояния, прежде чем перечисление государству необходимо определить статус видов. 3, все с поведением государства, связанных в класс, и вы можете легко добавить новое состояние, нужно только изменить состояние объекта может изменить поведение объектов. 4, что позволяет осуществить переход состояния логическое состояние объекта в одном, а не один огромный блок условных операторов. 5, позволяет использовать несколько объектов разделяют среду состояние объекта, тем самым уменьшая количество объектов в системе.

Недостатки: 1, Паттерн состояние использования связано с увеличением числа системных классов и объектов.2, структура и реализация государственной формы являются более сложными, при неправильном использовании может вызвать путаницу структуру программы и код. 3, поддержка государственного образца "Открытый Закрытый принцип" не очень хорошо, вы можете переключать состояние государственной модели, добавляя новые классы нужно изменить статус лиц, ответственных за переходы состояний исходного кода, или не может перейти в новое состояние, и изменить состояние класс действовать также необходимо модифицировать исходный код соответствующего класса.

Сценарии использования: 1, с поведением изменения состояния и изменения сцены.2, условный переход утверждение заменой.

Примечание: При использовании ограниченного государственного поведения путем государственного режима, а государство не более пяти.

реализация

Мы создадим интерфейс статуса и сущностигосударственныйкласс реализации интерфейсаState.Контекст представляет собой класс с определенным состоянием.

StatePatternDemo,мы демонстрируем использование объектовКонтекстКонтекст класса и статуса , чтобы продемонстрировать изменение поведения в состоянии изменения.

Паттерн состояние UML диаграмма

Шаг 1

Создайте интерфейс.

State.java

public interface State {
   public void doAction(Context context);
}

Шаг 2

Создать класс сущностей, который реализует интерфейс.

StartState.java

Открытый класс StartState реализует государство {

   общественного недействительными DoAction (контекст Контекст) {
      System.out.println ( "Игрок находится в стартовом состоянии");
      context.setState (это);	
   }

   общественного Строка ToString () {
      вернуть "начальное состояние";
   }
}

StopState.java

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);	
   }

   public String toString(){
      return "Stop State";
   }
}

Шаг 3

Создание классаконтекста.

Context.java

Открытый класс {Context
   частное Государственное государство;

   общественный контекст () {
      состояние = NULL;
   }

   общественного недействительными SetState (Государственное государство) {
      this.state = состояние;		
   }

   общенародного государства GetState () {
      возвращать состояние;
   }
}

Шаг 4

Используйтеконтекст, чтобы увидеть поведение при изменении состояния измененийсостояния.

StatePatternDemo.java

Открытый класс StatePatternDemo {
   государственной статической силы основных (String []) {агдз
      Контекст Контекст = новый контекст ();

      StartState startState = новый StartState ();
      startState.doAction (контекст);

      System.out.println (context.getState () ToString ().);

      StopState stopState = новый StopState ();
      stopState.doAction (контекст);

      System.out.println (context.getState () ToString ().);
   }
}

Шаг 5

Проверьте выход.

Игрок находится в стартовом состоянии
Start государственный
Игрок находится в состоянии останова
остановленном