设计模式21-状态模式(州)
如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。
设计模式21-状态模式(State)
概述
如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。
优点
容易新加状态,封装了状态转移规则,每个状态可以被复用和共享。
避免大量的如果不是这样结构。
缺点
状态类膨胀。
新加入状态时,可能需要修改现有的状态实现。
简单实现
JDK实现
公共接口状态[
/**
*打开手机
*/
void open();
/**
*关闭手机
*/
void close();
}
@Slf4j
公共类等待状态实现了州{
私有最终MobileModel模型;
公共等待状态(移动模型){ 0
模型=模型
}
@覆盖
public void open(){ 0
log.info('开启手机中。');
this.model.setState(新的OpenState(这个。模型));
}
@覆盖
public void close(){ 0
log.info('关闭手机中。');
this.model.setState(新CloseState(此。模型));
}
}
@Slf4j
公共类OpenState实现了州{
私有最终MobileModel模型;
公共OpenState(MobileModel模型){ 0
模型=模型
}
@覆盖
public void open(){ 0
log.info('手机已开启');
}
@覆盖
public void close(){ 0
log.info('关闭手机中。');
model.setState(新CloseState(此。模型));
}
}
@Slf4j
公共类关闭状态实现了州{
私有最终MobileModel模型;
公共关闭状态(移动模式模型){ 0
模型=模型
}
@覆盖
public void open(){ 0
log.info('开启手机中。');
this.model.setState(新的OpenState(这个。模型));
}
@覆盖
public void close(){ 0
log.info('手机已关闭');
}
}
状态模式中具体实现功能的代码被封装到了状态的实现类中,上下文通过设置不同的状态实现类。
公共类MobileModel {
私人国家;
public MobileModel() { }
公共移动模型(州)
这个.状态=状态
}
公共无效设置状态(州状态){ 0
这个.状态=状态
}
public void open(){ 0
国家。open();
}
public void close(){ 0
国家。close();
}
}
在同一场景中根据不同的状态来调用不同的业务逻辑。
公共类设计模式
@测试
public void statdesignpattern(){ 0
移动模型=新移动模型();
model.setState(新的等待状态(模型));
模特。open();
模特。open();
模特。close();
模特。close();
模特。open();
}
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53731.html