状态模式

一、什么是状态模式

状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。

二、状态模式应用场景

当一个事件或者对象有很多种状态,状态之间会相互转换,对不同的状态要求有不同的行为的时候,可以考虑使用状态模式。

三、状态模式的优缺点

优点:

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

标签:状态   模式   可维护性   大神   扩展性   优缺点   对象   事情   策略   代码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top