允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
类图如下
IState
public interface IState
{
void Do(Context context);
}
State1
public class State1 : IState
{
public void Do(Context context)
{
Console.WriteLine("state1");
context.SetState(new State2());
}
}
State2
public class State2 : IState
{
public void Do(Context context)
{
Console.WriteLine("state2");
context.SetState(new State1());
}
}
Context
public class Context
{
private IState state;
public void SetState(IState state)
{
this.state = state;
}
public void DoSomething()
{
this.state.Do(this);
}
}
调用
static void Main(string[] args)
{
Context context = new Context();
context.SetState(new State1());
context.DoSomething();
context.DoSomething();
}
优点:
1.逻辑清晰,把if else 拆分到State类中
- 方便扩展
缺点:
1.如果状态过多,增加状态类的数量,增加程序复杂性
- 由于逻辑拆分到状态类中,程序不太易于阅读
- 对于”开闭原则“支持不友好。当增加状态类时需要修改已有状态类中状态类转换的代码。
源代码地址: 点击我下载 提取码: hhpc