И примеры следует понимать, шаблон состояния

Во-первых, то, что

1. Определение: пакет на основе состояния поведения и использовании делегирования переключения между поведением

2. Преимущества: каждое изменение состояния Инкапсулируя локализованы в любом классе, потом нужно сделать

3. Недостатки: статус класса часто приводит к существенному увеличению числа проектных классов

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

Во-вторых, пример

Сцена: Шаг предположить чашку кофе, чтобы взять пустую чашку 1 2. Добавьте 3 чашки растворимого кофе в чашку с добавлением воды.

Этот сценарий имеет три состояния: 1. Пустые чашки, содержащие мгновенный чашку кофе 2. 2. Чаша наполнена водой

Оригинальная реализация:

  Писали о поддельных кодах, есть единственный способ взять кубок, который будет иметь четыре, если судья, назад судья, если метод все еще продолжается, относительно небольшие проблемы, конечно же, самое главное, если бы они хотели изменить шаги, весь класса в области видимости класса. Состояние режим, в котором вы можете помочь нам изменить локализацию

Окончательный  статический  ИНТ NO_CUP = 0                     // Не состояние чашки 
Final  статической  INT EMPTY_CUP =. 1                  // пустая чашка 
Final  статическая  INT INSTANT_COFFEE_CUP = 2         // чашка с мгновенным порошком кофе 
Final  статическому  Int ENJOY_CUP =. 3                  // красного хорошим кофе, польщен чашка 

// метод , чтобы получить чашу 
общественного  аннулируются takeCup () {
     IF (State == NO_CUP) {
         , // в это время нет чашек, поэтому я взял пустую чашку 
        State = EMPTY_CUP; 
    } еще  И.Ф.(State == EMPTY_CUP) {
         // есть пустая чашка, не нужно пересдать 
    } на другой  IF (State == INSTANT_COFFEE_CUP) {
         // имеет чашку растворимого кофейного порошка без необходимости пересдать 
    } еще  IF (State == ENJOY_CUP) {
         // есть хороший кофе красный, не нужно отбит 
    } 
}

Существующие реализации:

Класс 1. Статус

1.1 Интерфейс класс состояния

/ ** 
 * состояние интерфейса 
 * / 
общественного  интерфейса государства { 

    / * 
     * получить чашку 1. 
     * / 
    пустота takeCup (); 

    / ** 
     * 2. Добавьте растворимый кофе в чашке 
     * / 
    пустота addInstantCoffe (); 

    / ** 
     * добавляют воду в чашку 3. 
     * / 
    недействительным AddWater (); 

    / ** 
     * 4. наслаждаться кофе 
     * / 
    пустота enjoyCoffe (); 
}

не 1.2 нетых стаканчиков государственных классов

/ ** 
 * 0 состояние без чашек 
 * / 
общественного  класса NoCupState орудия государство {
     Private MakeCoffe makeCoffe; 

    общественный NoCupState (MakeCoffe makeCoffe) {
         это .makeCoffe = makeCoffe; 
    } 

    @Override 
    общественная  пустота takeCup () { 
        makeCoffe.state = makeCoffe. emptyCupState; 
        System.out.println ( "взял чашу" ); 
    } 

    @Override 
    общественная  пустота addInstantCoffe () { 
        System.out.println ( "есть не чашка, чашка должна принять" ); 
    }

    @Override 
    общественности  недействительным AddWater () { 
        System.out.println ( «есть не чашка, чашка должна принять» ); 
    } 

    @Override 
    общественности  недействительным enjoyCoffe () { 
        System.out.println ( «еще не чашка, не может наслаждаться ах " ); 
    } 
}

1.3 чашки пустого состояния

/ ** 
 * с пустой чашкой 1. состояние 
 * / 
общественного  класса EmptyCupState орудия государство {
     Private MakeCoffe makeCoffe, 

    общественный EmptyCupState (MakeCoffe makeCoffe) {
         это .makeCoffe = makeCoffe; 
    } 

    @Override 
    общественная  пустота takeCup () { 
        System.out. Println ( «есть пустая чашка, и не нужно» ); 
    } 

    @Override 
    общественная  пустоту addInstantCoffe () {
         это .makeCoffe.state = makeCoffe.instantCoffeCupState; 
        System.out.println ( «растворимый кофе в чашку плюс» ) ;
    } 

    @Override 
    общественная  аннулируется AddWater () { 
        System.out.println ( "чашке нужна сначала ускоряет таяние порошка кофе, добавить воду" ); 
    } 

    @Override 
    общественная  пустоту enjoyCoffe () { 
        System.out.println ( «Теперь пусто чашка, не может наслаждаться ах " ); 
    } 
}

1,4 плюс состояние растворимого кофе

/ ** 
 * 2. Добавьте растворимый кофе состояние 
 * / 
общественный  класс InstantCoffeCupState орудия государство {
     Private MakeCoffe makeCoffe; 

    общественный InstantCoffeCupState (MakeCoffe makeCoffe) {
         это .makeCoffe = makeCoffe; 
    } 

    @Override 
    общественная  пустота takeCup () { 
        System.out. Println ( «чашка растворимого кофе была добавлена, ненужен взять» ); 
    } 

    @Override 
    общественная  пустота addInstantCoffe () { 
        System.out.println ( «чашка растворимого кофе была добавлена, не нужна , чтобы вернуть Растворимый кофе " ); 
    } 

    @Override
    общественного  недействительными AddWater () { 
        makeCoffe.state = makeCoffe.coffeOkState; 
        System.out.println ( "выпить чашку растворимого кофе, добавляемой воды" ); 
    } 

    @Override 
    общественная  пустота enjoyCoffe () { 
        System.out.println ( «Сейчас вода не была добавлена в чашки, не может наслаждаться ах " ); 
    } 
}

1,5 в комплекте с водой, кофе хорошего состояния, наслаждаясь кофе

/ ** 
 * 4. кофе хороший, наслаждаться кофе 
 * / 
общественного  классом CoffeOkState орудие государство { 
    @Override 
    общественным  аннулируется takeCup () { 
        System.out.println ( «Кофе мыл хорошо, то давайте не нужна чашка» ) ; 
    } 

    @Override 
    общественного  аннулируются addInstantCoffe () { 
        System.out.println ( "кофе имеет хороший красный, не нужно добавить растворимый кофе" ); 
    } 

    @Override 
    общественности  недействительным AddWater () { 
        System.out.println ( «кофе был хорошо промывают, не требует добавления воды " ); 
    } 

    @Override 
    общественности  пустот enjoyCoffe () {
        System.out.println ( "наслаждаться слегка кофе" ); 
    } 
}

2. Сделайте категорию кофе

/ ** 
 * сделать класс кофе 
 * / 
общественного  класса MakeCoffe { 

    / ** 
     * Это состояние кофе 
     * / 
    общественное Государство Государство; 

    / ** 
     * нет чашек состояние 
     * / 
    общественного NoCupState noCupState;
     / ** 
     * есть пустая чашка статус 
     * / 
    общественного emptyCupState emptyCupState;
     / ** 
     * там чашка кофе быстрорастворимый порошок состояние 
     * / 
    общественного instantCoffeCupState instantCoffeCupState;
     / ** 
     * кофе хорошее красное состояние 
     * / 
    общественного coffeOkState coffeOkState, 

    общественный MakeCoffe () {
         это .noCupState = новый новыйNoCupState ( это );
         это .emptyCupState = новый новый EmptyCupState ( это );
         это .instantCoffeCupState = новый новый InstantCoffeCupState ( это );
         это .coffeOkState = новый новый CoffeOkState (); 

        // Установить по умолчанию 
        в этом .STATE = это .noCupState; 
    } 

    // взять чашу 
    общественного  аннулируются takeCup () { 
        state.takeCup (); 
    } 

    // Добавить растворимый кофе 
    общественного  аннулируются addInstantCoffe () {
        state.addInstantCoffe (); 
    } 

    // 加水
    общественная  пустота AddWater () { 
        state.addWater (); 
    } 

    Общественного  недействительными enjoyCoffe () { 
        state.enjoyCoffe (); 
    } 
}

3. Тест

/ ** 
 * Пить кофе тест класс 
 * / 
общественный  класс EnjoyCoffeMain { 

    общественный  статический  недействительный основной (String [] арг) { 
        MakeCoffe makeCoffe = новый новый MakeCoffe (); 

        makeCoffe.takeCup (); 
        makeCoffe.addInstantCoffe (); 
        makeCoffe.addWater () ; 
        makeCoffe.enjoyCoffe (); 
    } 
} 

// консоль отображает 
взял чашку 
к чашке растворимого кофе плюс 
выпить чашку растворимого кофе, добавить воду 
и немного выпить кофе

1. Поздравляет обезьянничать эту программу без написания много IF определяют успех пользуется кофе, состояние образца здесь, я думаю, что те преимущества, которые могут быть упакованы отдельно изменить, если изменение после эксплуатации состояния, не нужно, чтобы найти все И.Ф. и найти соответствующие изменения класса.

2. Добавьте или после определенного состояния, а затем, по мере необходимости каппучина молочного сахара и т.д., нет необходимости модифицировать IF, но добавить статус, не изменить код частичного состояния

3. Недостаток вызывается, добавил много класса

В-третьих, резюме

Подумайте около двух лет назад, состояние их собственного понимания закономерностей, и понять немного больше, чем раньше

рекомендация

отwww.cnblogs.com/milicool/p/11278671.html