状态模式
定义:将逻辑判断改为状态行为,允许状态改变时改变其行为状态
模式结构:
1.抽象状态:接口
2.实体状态:具体的状态,比如Order、Product
3.上下文:它定义了客户端所需的接口,内部维护当前状态,负责具体状态的切换
接口
interface LogisticsState
{
void DoAction(jdLogistics context);
}
实体状态
class Order : LogisticsState
{
public void DoAction(jdLogistics context)
{
Console.WriteLine("开始执行订单...");
}
}
class Product : LogisticsState
{
public void DoAction(jdLogistics context)
{
Console.WriteLine("开始发货...");
}
}
上下文
class jdLogistics
{
private LogisticsState state;
public void SetState(LogisticsState state)
{
this.state = state;
}
public void DoAction()
{
if (state != null)
{
state.DoAction(this);
}
}
}
然后通过控制台执行
class Program
{
static void Main(string[] args)
{
jdLogistics jd = new jdLogistics();
Order order = new Order();
jd.SetState(order);
jd.DoAction();
Product product = new Product();
jd.SetState(product);
jd.DoAction();
}
}
控制台执行结果:
优点:扩展性强,添加一个状态只需要添加一个类。封装性强,将所有状态之间的操作都封装到一个类中
缺点:类变多了