【设计模式】状态模式

简介:

一、什么是状态模式

一个对象的行为根据其内部状态的改变自动变化;

二、补充说明

结构与策略模式基本一致;

与策略模式区别:使用策略模式时,客户端手动选择策略,使用状态模式时,其行为是根据状态是自动切换的。

其内部状态改变时,它的行为(方法)也跟着改变,看起来就像修改了类的方法;

三、角色

抽象状态

具体状态

环境:定义客户端感兴趣的方法,其内部有一个状态接口,运行时可以改变;

客户端

四、例子,JAVA实现

说明:还是策略模式的例子,只不过这个人比较特殊,他喜欢一天走路上班,另一天开车上班...

两种状态:走路上班状态和开车上班状态,运行时可以改变

抽象状态

package com.pichen.dp.behavioralpattern.state;

public interface IState {

    public void execute(StateContext context);
}

具体状态

复制代码
package com.pichen.dp.behavioralpattern.state;

public class DriveState implements IState{

    @Override
    public void execute(StateContext context) {
        System.out.println("driving。。。");
        context.setState(new WalkState());
    }

}
复制代码
复制代码
package com.pichen.dp.behavioralpattern.state;

public class WalkState implements IState{

    @Override
    public void execute(StateContext context) {
        System.out.println("walking。。。");
        context.setState(new DriveState());
    }

}
复制代码

环境:

复制代码
package com.pichen.dp.behavioralpattern.state;

public class StateContext {

    IState state;
    
    public StateContext(IState state) {
        this.state = state;
    }

    public void execute(){
        this.state.execute(this);
    }
    /**
     * @return the state
     */
    public IState getState() {
        return state;
    }

    /**
     * @param state the state to set
     */
    public void setState(IState state) {
        this.state = state;
    }
    



}
复制代码

客户端

复制代码
package com.pichen.dp.behavioralpattern.state;

public class Main {
    public static void main(String[] args) {
        StateContext stateContext = new StateContext(new WalkState());
        stateContext.execute();
        stateContext.execute();
        stateContext.execute();
        stateContext.execute();
        stateContext.execute();
    }
}
复制代码

执行结果:用户的上班行为状态在运行时自动切换

walking。。。
driving。。。
walking。。。
driving。。。
walking。。。

 本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/5216041.html,如需转载请自行联系原作者

相关文章
|
5月前
|
设计模式
设计模式之 State(状态模式)
设计模式之 State(状态模式)
33 0
|
8天前
|
设计模式 Java 测试技术
Java设计模式-状态模式(18)
Java设计模式-状态模式(18)
|
2月前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
3月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
46 7
|
4月前
|
设计模式
状态模式-大话设计模式
状态模式-大话设计模式
|
4月前
|
设计模式 存储
行为设计模式之状态模式
行为设计模式之状态模式
|
5月前
|
设计模式 Go
[设计模式 Go实现] 行为型~状态模式
[设计模式 Go实现] 行为型~状态模式
|
5月前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
47 4
|
5月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
5月前
|
设计模式 Java
【设计模式系列笔记】状态模式
在Java中,状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。状态模式的关键思想是将对象的状态封装成独立的类,并将对象的行为委托给当前状态的对象。这样,当对象的状态发生变化时,其行为也会相应地发生变化。
54 0