本文介绍: 本文介绍了行为型设计模式中的状态模式,讲解了它的特点和相关构成,并结合案例使用Java代码进行演示。
设计模式—行为型模式之状态模式
状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
状态模式包含以下主要角色:
- 环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。
- 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。
- 具体状态(Concrete State)角色:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。
示例
比如我们的会议有以下状态:待创建、待开始、进行中、已结束状态;我们的代码如下:
/**
* 状态接口
*/
public interface MeetingStateInterface {
//当前状态
void state();
//下一个状态
MeetingStateInterface next();
}
public class WaitCreateMeetingState implements MeetingStateInterface{
@Override
public void state() {
System.out.println("当前在待创建状态");
}
@Override
public MeetingStateInterface next() {
return new WaitStartMeetingState();
}
}
public class WaitStartMeetingState implements MeetingStateInterface{
@Override
public void state() {
System.out.println("待开始状态");
}
@Override
public MeetingStateInterface next() {
return new ProcessingMeetingState();
}
}
public class ProcessingMeetingState implements MeetingStateInterface{
@Override
public void state() {
System.out.println("会议进行中状态");
}
@Override
public MeetingStateInterface next() {
return new EndMeetingState();
}
}
public class EndMeetingState implements MeetingStateInterface{
@Override
public void state() {
System.out.println("已结束会议状态");
}
@Override
public MeetingStateInterface next() {
return null;
}
}
会议类如下:
public class Meeting {
private MeetingStateInterface meetingState;
public void setMeetingState(MeetingStateInterface meetingState) {
this.meetingState = meetingState;
}
//会议当前状态
public void state(){
meetingState.state();
}
//下一个状态
public void nextState(){
if(this.meetingState != null){
this.meetingState = this.meetingState.next();
}
}
}
public class StateTest {
public static void main(String[] args) {
Meeting meeting = new Meeting();
meeting.setMeetingState(new WaitCreateMeetingState());
meeting.state();
meeting.nextState();
meeting.state();
meeting.nextState();
meeting.state();
meeting.nextState();
meeting.state();
meeting.nextState();
}
}
运行结果如下:
状体模式一定要有状态切换。
原文地址:https://blog.csdn.net/qq_41243472/article/details/135560586
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_56486.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。