状态模式:用类来表示状态。
例如客服电话,只有白天的时候才有人工服务,晚上就只有自助服务。
如果没有状态类,通常代码实现是这样的:
class Service{
public void server(){
if(白天){
人工服务
}
if(晚上){
自助服务
}
}
}
如果将白天、晚上用对象来表示,那么代码会是这样的
//状态接口,定义服务方法
interface State{
void server();
}
//白天类
class Day implements State{
void server(){
人工服务
}
}
//晚上类
class Night implements State{
void server(){
自助服务
}
}
通过状态类,将原本的if else 代码进行了拆分,通过状态的变化来调用不同的类方法。
状态模式易于添加新的状态类,只需要创建新类,实现方法就行,不用改动原有代码。难于增加新方法,因为需要改动原有类,并在所有状态类中都要实现新添的方法