您好,登录后才能下订单哦!
状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态改变时改变其行为。这种模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
在Java中实现状态模式,通常涉及到以下几个角色:
下面是一个简单的Java状态模式的例子:
// State接口
public interface State {
void handle(Context context);
}
// 具体状态A
public class ConcreteStateA implements State {
@Override
public void handle(Context context) {
System.out.println("State A handled.");
context.setState(new ConcreteStateB()); // 转移到状态B
}
}
// 具体状态B
public class ConcreteStateB implements State {
@Override
public void handle(Context context) {
System.out.println("State B handled.");
context.setState(new ConcreteStateA()); // 转移到状态A
}
}
// 上下文类
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);
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Context context = new Context(new ConcreteStateA());
for (int i = 0; i < 5; i++) {
context.request();
}
}
}
在这个例子中,我们有一个Context
类,它维护了一个State
接口的实例。Context
类有一个request
方法,它调用当前状态实例的handle
方法。ConcreteStateA
和ConcreteStateB
是具体的状态类,它们分别实现了State
接口,并定义了在各自状态下的行为。在ConcreteStateA
的handle
方法中,我们改变了Context
的状态为ConcreteStateB
,反之亦然。
在Test
类中,我们创建了一个Context
实例,初始状态为ConcreteStateA
,然后连续调用5次request
方法。你会看到状态在ConcreteStateA
和ConcreteStateB
之间交替切换。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。