状态模式
介绍
状态模式将不同状态下的行为封装在不同的类中,每个类代表一个状态。
(1)Context:定义了与客户程序的接口,它保持了一个ConcreteState的代表现在状态的实例。
(2)State:定义了状态接口,它的各个子类封装了在各种不同状态下的行为。
(3)ConcreteState子类:封装了在各种不同状态下的行为。
示例
开关有开和关两种状态
public class Context
{
private Switch s,On,off;
public Context(Switch s)
{
this.s = s;
on = new On();
off = new Off();
}
...可以设置当前的状态...
}
public abstract class Switch
{
...
}
public class On extends Switch
{
...
}
...
优点
(1)修改状态子类时,不需要修改Context代码
(2)在增加新的状态子类时,可能只修改少许代码。
(3)将状态与客户类分离。