一、什么是状态模式
状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。
二、状态模式应用场景
当一个事件或者对象有很多种状态,状态之间会相互转换,对不同的状态要求有不同的行为的时候,可以考虑使用状态模式。
三、状态模式的优缺点
优点:
1)结构清晰,将状态独立为类,去除了if...else或switch...case语句,提高了系统的可维护性。
2)状态类职责明确且具备扩展性。
缺点:
1)类膨胀,如果一个类的状态过多,则会造成状态类过多。
2)增加新的状态类需要修改那些负责状态转换的代码。
四、状态模式与策略模式区别
1)状态模式重点在各状态之间的切换从而做不同的事情,而策略模式更侧重于根据具体情况选择策略,并不涉及切换。
2)状态模式不同状态做的事情不同,而策略模式做的都是同一件事,例如支付宝、微信支付、银联支付,虽然策略不同,但最终做的事情都是支付,也就是说他们之间是可替换的。而状态模式,各个状态的同一方法做的是不同的事,不能互相替换。
五、代码实现
//接口
interface State {
public void doAction(Context context);
}
//枚举状态
public enum StateEnum {
START,STOP,PALY;
}
//实现类
class StartState implements State {
public void doAction() {
System.out.println("start state===");
}
public String toString() {
return "Start State toString";
}
}
//实现类
class StopState implements State {
public void doAction() {
System.out.println("stop state======");
}
public String toString() {
return "Stop State toString";
}
}
class PlayState implements State {
public void doAction() {
System.out.println("play state===");
}
public String toString() {
return "Play State toString";
}
}
class Context {
private Map,State> stateMap=new HashMap<>();
public Context(){
stateMap.put(StateEnum.START,new StartState());
stateMap.put(StateEnum.STOP,new StopState());
stateMap.put(StateEnum.PALY,new PlayState());
}
public void doAction(Enum enumEnum){
State state = stateMap.get(enumEnum);
state.doAction();
}
}
public class Main {
public static void main(String[] args) {
Context stateHandler=new Context();
stateHandler.doAction(StateEnum.START);
stateHandler.doAction(StateEnum.PALY);
}
}
有不足之处,请各位大神多多指教,多多点赞评论交流。[作揖][作揖]
页面更新:2024-05-02
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号