【设计模式】—— 状态模式State

简介:

  模式意图

  允许一个对象在内部改变它的状态,并根据不同的状态有不同的操作行为。

  例如,水在固体、液体、气体是三种状态,但是展现在我们面前的确实不同的感觉。通过改变水的状态,就可以更改它的展现方式。

  应用场景

  1 当一个对象的行为,取决于它的状态时

  2 当类结构中存在大量的分支,并且每个分支内部的动作抽象相同,可以当做一种状态来执行时。

  模式结构

  

  Context 环境角色,里面包含状态对象

复制代码
class Context{
    private State state;
    public void setState(State state) {
        this.state = state;
    }
    public void operation(){
        state.operation();
    }
}
复制代码

  State 状态的抽象接口

interface State{
    public void operation();
}

  ConcreteState 具体的状态角色

复制代码
class ConcreteState1 implements State{
    public void operation(){
        System.out.println("state1 operation");
    }
}
class ConcreteState2 implements State{
    public void operation(){
        System.out.println("state2 operation");
    }
}
class ConcreteState3 implements State{
    public void operation(){
        System.out.println("state3 operation");
    }
}
复制代码

  全部代码

复制代码
 1 package com.xingoo.test.design.state;
 2 class Context{
 3     private State state;
 4     public void setState(State state) {
 5         this.state = state;
 6     }
 7     public void operation(){
 8         state.operation();
 9     }
10 }
11 interface State{
12     public void operation();
13 }
14 class ConcreteState1 implements State{
15     public void operation(){
16         System.out.println("state1 operation");
17     }
18 }
19 class ConcreteState2 implements State{
20     public void operation(){
21         System.out.println("state2 operation");
22     }
23 }
24 class ConcreteState3 implements State{
25     public void operation(){
26         System.out.println("state3 operation");
27     }
28 }
29 public class Client {
30     public static void main(String[] args) {
31         Context ctx = new Context();
32         State state1 = new ConcreteState1();
33         State state2 = new ConcreteState2();
34         State state3 = new ConcreteState3();
35         
36         ctx.setState(state1);
37         ctx.operation();
38         
39         ctx.setState(state2);
40         ctx.operation();
41         
42         ctx.setState(state3);
43         ctx.operation();
44     }
45 }
复制代码

  运行结果

state1 operation
state2 operation
state3 operation

 

本文转自博客园xingoo的博客,原文链接:【设计模式】—— 状态模式State,如需转载请自行联系原博主。
相关文章
|
18天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
1月前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
29 4
|
2月前
|
设计模式
【设计模式】状态模式
【设计模式】状态模式
|
3月前
|
设计模式 Java 测试技术
浅谈设计模式 - 状态模式(十三)
浅谈设计模式 - 状态模式(十三)
19 0
|
4月前
|
设计模式 程序员
设计模式-状态模式(State)
设计模式-状态模式(State)
40 0
|
4月前
|
设计模式 Java
聊聊Java设计模式-状态模式
状态模式(State Pattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
54 1
|
4月前
|
设计模式 Go 开发工具
Golang设计模式——14状态模式
Golang设计模式——14状态模式
27 0
|
4月前
|
设计模式 前端开发
【设计模式】之状态模式
状态模式是一种非常有用的设计模式,在前端开发中经常用于管理应用状态和处理复杂的流程。它通过将对象行为和属性与特定条件下的处理逻辑分离开来,提高了代码的可维护性和可扩展性。通过使用状态模式,我们可以优雅地管理应用状态,并根据不同的条件来改变对象行为。然而,在应用状态模式时需要权衡其带来的优缺点,并根据具体情况进行选择。
39 1
|
5月前
|
设计模式
二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
|
5月前
|
设计模式
二十三种设计模式-解密状态模式:优雅地管理对象状态
二十三种设计模式-解密状态模式:优雅地管理对象状态