`

STATE(状态)—— 对象行为型模式

 
阅读更多
1、意图
    允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
2、别名
    状态对象(Objects for States)
3、动机
    考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listening)、连接已关闭(Closed)。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态作出不同的反应。例如,一个Open请求的结果依赖于该连接是处于连接已关闭状态还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。
    这一模式的关键思想是引入一个称为TCPState的抽象类来表示网络的连接状态。TCPState类为各表示不同的操作状态的子类声明了一个公共接口。TCPState的子类实现与特定状态相关的行为。例如,TCPEstablished和TCPClosed类分别实现了特定于TCPConnection的连接已建立状态和连接已关闭状态的行为。


    TCPConnection类维护一个表示TCP连接当前状态的状态对象(一个TCPState子类的实例)。TCPConnection类将所有与状态相关的请求委托给这个状态对象。TCPConnection使用它的TCPState子类实例来执行特定于连接状态的操作。
    一旦连接状态改变,TCPConnection对象就会改变它所使用的状态对象。例如当连接从已建立状态转为已关闭状态时,TCPConnection会用一个TCPClosed的实例来代替原来的TCPEstablished的实例。
4、适用性
    在下面的两种情况下均可使用State模式:
    一个对象的行为取决去它的状态,并且它必须在运行时刻根据状态改变它的行为。
    一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放到一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
5、结构


6、参与者
    Context(环境,如TCPConnection)
    ——定义客户感兴趣的接口。
    ——维护一个ConcreteState子类的实例,这个实例定义当前状态。
    State(状态,如TCPState)
    ——定义一个接口以封装与Context的一个特定状态相关的行为。
    ConcreteState subclasses(具体状体子类,如TCPEstablished,TCPListen,TCPClosed)
    ——每一个子类实现一个与Context的一个状态相关的行为

7、代码示例

interface Statelike {
 
    /**
     * Writer method for the state name.
     * @param STATE_CONTEXT
     * @param NAME
     */
    void writeName(final StateContext STATE_CONTEXT, final String NAME);
 
}
 
class StateA implements Statelike {
    /* (non-Javadoc)
     * @see state.Statelike#writeName(state.StateContext, java.lang.String)
     */
    @Override
    public void writeName(final StateContext STATE_CONTEXT, final String NAME) {
        System.out.println(NAME.toLowerCase());
        STATE_CONTEXT.setState(new StateB());
    }
 
}
 
class StateB implements Statelike {
    /** State counter */
    private int count = 0;
 
    /* (non-Javadoc)
     * @see state.Statelike#writeName(state.StateContext, java.lang.String)
     */
    @Override
    public void writeName(final StateContext STATE_CONTEXT, final String NAME) {
        System.out.println(NAME.toUpperCase());
        // Change state after StateB's writeName() gets invoked twice
        if(++count > 1) {
            STATE_CONTEXT.setState(new StateA());
        }
    }
 
}

The context class has a state variable that it instantiates in an initial state, in this case StateA. In its method, it uses the corresponding methods of the state object.

public class StateContext {
    private Statelike myState;
        /**
         * Standard constructor
         */
    public StateContext() {
        setState(new StateA());
    }
 
        /**
         * Setter method for the state.
         * Normally only called by classes implementing the State interface.
         * @param NEW_STATE
         */
    public void setState(final Statelike NEW_STATE) {
        myState = NEW_STATE;
    }
 
        /**
         * Writer method
         * @param NAME
         */
    public void writeName(final String NAME) {
        myState.writeName(this, NAME);
    }
}


public class TestClientState {
    public static void main(String[] args) {
        final StateContext SC = new StateContext();
 
        SC.writeName("Monday");
        SC.writeName("Tuesday");
        SC.writeName("Wednesday");
        SC.writeName("Thursday");
        SC.writeName("Friday");
        SC.writeName("Saturday");
        SC.writeName("Sunday");
    }
}

monday
TUESDAY
WEDNESDAY
thursday
FRIDAY
SATURDAY
sunday
  • 大小: 50.9 KB
  • 大小: 21.3 KB
分享到:
评论

相关推荐

    设计模式可复用面向对象软件的基础.zip

    5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 ...

    [行为型模式] 状态模式的理解

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。...同时,状态模式也使得对象的行为与其状态之间的依赖关系变得更加清晰,符合开闭原则——对扩展开放,对修改关闭。

    Android 设计模式:(一)观察者模式 —— 封装行为的大局观

    本文将深入探讨其中的一种——观察者模式(Observer Pattern),它是行为设计模式的一种,主要用来封装行为的变化,实现对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被...

    design-pattern-java.pdf

    十一个行为型模式 状态模式-State Pattern 处理对象的多种状态及其相互转换——状态模式(一) 处理对象的多种状态及其相互转换——状态模式(二) 处理对象的多种状态及其相互转换——状态模式(三) 处理对象的...

    python 状态模式(示例)

    设计模式——状态模式状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同...

    X-gen PPT下载——《研磨设计模式》 实战

    **行为型模式**:包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)...

    Java 23种设计模式24状态模式.pdf

    ”这一定义强调了状态模式的核心思想——通过改变对象所处的具体状态类来改变其行为,而不是通过修改对象自身来实现行为的变化。 ### 模式结构 状态模式主要由以下几种角色构成: - **Context(环境类)**:持有...

    23种 设计模式---面向对象的基本原则

    - 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎改变了它的类。 - 策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立...

    设计模式精解——GoF23中设计模式解析

    #### 行为模式 1. **Template Method模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。这种模式适用于算法的步骤固定,但其中的...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    **行为型模式**:包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、...

    Android 设计模式:(二)观察者模式 —— 让你的对象知悉现况

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ### 一、观察者模式概念 观察者模式的核心思想是让主题(Subject)...

    State Machine Java Pattern

    特别地,控制对象行为的关键状态(即控制状态)被抽取出来。需要注意的是,这些用于OOP中的自动机与用于正则表达式匹配的传统自动机有显著的不同。具体来说,在OOP中,对象是以接口和方法的形式设计的,而不是以可...

    设计模式_行为型_备忘录模式.md

    备忘录模式(Memento)是一种行为型设计模式,它允许在不暴露对象的实现细节的情况下,捕获并保存对象的内部状态,从而可以在未来某个时刻恢复到之前的状态。备忘录模式特别适用于实现撤销操作,或是需要进行状态...

    2 状态模式-课程内容.rar

    1. **模式定义**:理解状态模式的基本概念,包括模式的组成元素——上下文(Context)、具体状态(Concrete State)和状态接口(State)。 2. **上下文角色**:上下文是拥有状态的对象,它定义了与状态相关的一系列...

    设计模式-可复用面向对象软件的基础

    其中包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

    23钟设计模式之状态模式

    状态模式是一种行为设计模式,它使对象能够在运行时更改其行为,根据对象的状态改变其执行的动作。这种模式将特定的行为与状态相关联,使得当对象状态改变时,其行为也会相应地变化,而无需修改对象的结构。 在给定...

    有限状态机、状态模式的实现源代码

    在这个游戏中,小鸡会有不同的行为模式,比如吃食、睡觉、玩耍等,这些都是根据小鸡的状态来决定的。 状态模式的核心思想是将状态的行为封装在各自独立的类中,这样可以使对象在其内部状态改变时改变其行为,看起来...

    设计模式PPT---25种设计模式详解

    7. 状态模式(State):允许一个对象在其内部状态改变时改变它的行为。 8. 策略模式(Strategy):定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。 9. 模板方法模式(Template Method):在一个方法...

    设计模式C++版

    行为模式部分涉及: 1. Template模式,模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 2. Strategy模式,策略模式,定义一系列算法,把它们一个个封装起来,并使它们可相互替换。 3. ...

Global site tag (gtag.js) - Google Analytics