django做购物网站,上海嘉定建设局网站,软件开发赚钱多吗,深圳网站开发深圳网站设计设计模式—行为型模式之状态模式
状态#xff08;State#xff09;模式#xff1a;对有状态的对象#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中#xff0c;允许状态对象在其内部状态发生改变时改变其行为。
状态模式包含以下主要角色#xff1a;
环境类State模式对有状态的对象把复杂的“判断逻辑”提取到不同的状态对象中允许状态对象在其内部状态发生改变时改变其行为。
状态模式包含以下主要角色
环境类Context角色也称为上下文它定义了客户端需要的接口内部维护一个当前状态并负责具体状态的切换。抽象状态State角色定义一个接口用以封装环境对象中的特定状态所对应的行为可以有一个或多个行为。具体状态Concrete State角色实现抽象状态所对应的行为并且在需要的情况下进行状态切换。
示例
比如我们的会议有以下状态待创建、待开始、进行中、已结束状态我们的代码如下
/*** 状态接口*/
public interface MeetingStateInterface {//当前状态void state();//下一个状态MeetingStateInterface next();
}public class WaitCreateMeetingState implements MeetingStateInterface{Overridepublic void state() {System.out.println(当前在待创建状态);}Overridepublic MeetingStateInterface next() {return new WaitStartMeetingState();}
}public class WaitStartMeetingState implements MeetingStateInterface{Overridepublic void state() {System.out.println(待开始状态);}Overridepublic MeetingStateInterface next() {return new ProcessingMeetingState();}
}public class ProcessingMeetingState implements MeetingStateInterface{Overridepublic void state() {System.out.println(会议进行中状态);}Overridepublic MeetingStateInterface next() {return new EndMeetingState();}
}public class EndMeetingState implements MeetingStateInterface{Overridepublic void state() {System.out.println(已结束会议状态);}Overridepublic 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();}
}运行结果如下 状体模式一定要有状态切换。