软件设计状态模式代码
时间: 2023-07-03 15:07:52 浏览: 54
状态模式是一种行为型设计模式,它允许对象在内部状态更改时改变它的行为。以下是一个简单的状态模式实现的示例代码:
首先,我们需要定义状态接口和实现状态接口的具体状态类。
```java
// 状态接口
public interface State {
void handle(Context context);
}
// 具体状态类1
public class ConcreteState1 implements State {
@Override
public void handle(Context context) {
System.out.println("当前状态是状态1");
context.setState(new ConcreteState2()); // 状态转移
}
}
// 具体状态类2
public class ConcreteState2 implements State {
@Override
public void handle(Context context) {
System.out.println("当前状态是状态2");
context.setState(new ConcreteState1()); // 状态转移
}
}
```
然后,我们需要定义上下文类,它包含一个状态成员,并提供了一些操作方法,这些方法将在不同的状态下产生不同的效果。
```java
public class Context {
private State state;
public Context(State state) {
this.state = state;
}
public void setState(State state) {
this.state = state;
}
public void request() {
state.handle(this);
}
}
```
最后,我们可以使用上述类来模拟状态模式的实现。
```java
public class Client {
public static void main(String[] args) {
Context context = new Context(new ConcreteState1());
context.request();
context.request();
context.request();
}
}
```
输出结果:
```
当前状态是状态1
当前状态是状态2
当前状态是状态1
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)