1. Обзор
Когда в системе существует несколько состояний для объекта, между ними может быть преобразовано состояние, и объект ведет себя по -разному в разных состояниях. Режим состояния отделяет состояние объекта от объекта и инкапсулирует его в специальный класс состояния, так что состояние объекта может быть гибко изменено. Режим состояния является поведенческим режимом объекта.
2. Применимые сценарии
Используется для решения проблемы инкапсуляции множественных переходов сложных объектов в системе и поведения в разных состояниях. Проще говоря, он должен иметь дело с несколькими состояниями объектов и их взаимными конверсиями.
Iii. Диаграмма класса UML
4. Участники
1), AbstractState (Abstract State Class):
Класс абстрактного состояния определяет методы абстрактного поведения в разных состояниях, и различные поведенческие операции реализуются в подклассах (различные подклассы состояния).
2) Коннектика (подкласс состояния, который реализует поведение в конкретных состояниях):
Подклассы классов абстрактных состояний, каждый подкласс реализует поведение, связанное с состоянием класса окружающей среды (контекст). Каждый конкретный класс состояния соответствует конкретному состоянию окружающей среды, а поведение различных конкретных состояний различено.
3) Контекст (класс окружающей среды, который владеет объектами состояния):
Наличие государственных атрибутов, из -за разнообразия окружающей среды, он может иметь разные состояния и вести себя по -разному в разных государствах. Поддерживать абстрактный экземпляр состояния в классе окружающей среды. Этот экземпляр определяет состояние текущей среды (setState ()) и разделяет конкретное поведение состояния и завершается различными подклассами состояния.
5. Использовать обучение.
1. Аннотация Класс государства: state.java
/ *** Режим состояния шаблона проектирования Java* Аннотация класса состояния. }
2. Конкретный подкласс состояния A: Concetestatea.java
/ ** * Конкретный подкласс статуса A * @author [email protected] */ public Class concretestatea extends wation {@override public void behavilit оплата"); }}
3. Конкретный подкласс состояния B: Concetestateb.java
/ ** * Специфический штат подкласс B * @author [email protected] * */ public class concreteStateb extends wation {@override public void поведение () {// Бизнес -поведение штата B, и то, что он может сделать, когда он находится в этом состоянии //, например: когда мобильный телефон находится в задолженности и вниз, System. }}
4. Класс окружающей среды с объектами состояния: контекст. Java
/** * Среда/Класс контекста <br/> * имеет объект состояния и может завершить переход между состояниями [Изменения/переключение состояния/переключение в классе окружающей среды] * @author [email protected] * */public context {// Поддерживать ссылку на абстрактное государственное государство частного состояния; / * * Моделируйте атрибуты платы за телефонные звонка мобильного телефона <br/> * Состояние окружающей среды выглядит следующим образом: * 1>, когда Билл> = 0,00 $: Когда государство нормально, вы все равно можете совершать звонки * 2>, когда счет <0,00 $: Когда телефон должен, вы не можете совершать звонки */частный двойной счет; /*** Функция обработки окружающей среды, поведение экземпляра состояния, вызовов заполняет бизнес -логику <br/>* Ссылки на различные поведения в разных состояниях*/public void grame () {checkstate (); state.behavior (); }/*** Проверьте состояние окружающей среды: изменения состояния/переключение реализовано в классе окружающей среды*/private void chectState () {if (bill> = 0.00) {setState (new ConcreteStatea ()); } else {setState (new ConcreteStateb ()); }}/** * Установите состояние среды <br/> * Частный метод, цель состоит в том, чтобы позволить состоянию среды контролироваться/переключаться самой системной средой, а внешним пользователям не нужно заботиться о состоянии внутри окружающей среды * @param mater */private void setState (состояние состояния) {this.state = состояние; } public Double GetBill () {return Bill; } public void setbill (двойной счет) {this.bill = bill; }}
5. Проверка клиента Cally Class: client.java
public class client {public static void main (string [] args) {context context = new Context (); context.setbill (5.50); System.out.println («Баланс платы за текущие вызовы:» + context.getbill () + "$"); context.handle (); context.setbill (-1,50); System.out.println («Баланс платы за текущие вызовы:» + context.getbill () + "$"); context.handle (); context.setbill (50.00); System.out.println («Баланс платы за текущие вызовы:» + context.getbill () + "$"); context.handle (); }} 6. Результаты работы программы:
Текущий баланс платы за звонок: 5,5 $
Текущий баланс счета телефона может быть выполнен нормально, когда телефон не упадет из -за первоначального взноса: -1,5 $
Текущий баланс платы за телефон не разрешается совершать звонки, когда телефон вышел из эксплуатации.
Телефон может нормально совершать звонки без взноса
VI Расширять
Существует две разные реализации переключения состояний в режиме состояния
Метод 1: Изменение/переключение состояния реализовано в классе окружающей среды. Как и в приведенном выше коде использования, метод CheckState () в классе контекста.
/*** Проверьте состояние окружающей среды: изменения состояния/переключение внедряются в классе окружающей среды*/private void chectState () {if (bill> = 0.00) {setState (new ConcreteStatea ()); } else {setState (new ConcreteStateb ()); }} Метод 2: Изменение/переключение состояния реализовано в конкретном подклассе.
Шаги реализации следующие:
1) Инициализировать объект экземпляра состояния в классе контекста класса окружающей среды и передавать объект контекста окружения в качестве параметра конструктора состояния подкласса в конкретный экземпляр подкласса состояния.
Например, в контексте.
// Установить начальное состояние this.state = new Concetestatea (это);
2) В конкретном классе состояния подкласса, в соответствии с построенным объектом контекста, бизнес -логика судит статус, вызывая значение имущества объекта контекста.
Например, в классе ConcreteStatea.java конкретный подкласс состояния:
/ ** * Специфическое состояние подкласса A * @author [email protected] */ public Class concretestatea extends state {private context ctx; public concetestatea (контекст контекста) {ctx = контекст; } @Override public void behavility () {// Бизнес -поведение штата A, и что оно может сделать, когда оно находится в этом состоянии //, например: мобильный телефон может нормально выполнять звонки, когда он не падает из -за платежного платежа. CheckState (); }/** * Проверьте, необходимо ли преобразовать состояние <br/> * Переключение состояния реализовано в конкретном подклассе штата */private void chectState () {if (ctx.getBill () <0,00) {ctx.setState (new ConcretEStateb (ctx)); }}}
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.