状态模式主要解决当控制一个对象状态的转换的条件表达过于复杂的情况,使得状态的转换不依赖于整体的操作。本文将通过一个具体的例子说明状态模式的应用。假设下面一个场景:
一个新任务提交后,先是收集数据,数据收集完成后等等分配一台机器,分配到机器后就可以将此任务部署至此机器后就可以通知相关模块开始工作。
先对此场景做分析如下:
一个任务共分四个步骤:一收集数据,二分配机器,三部署到测试机,四通知相关对象。
任务的状态可以分为:new, waiting, Ready, Running分别对应新任务提交,等待分配机器,准备部署,和部署完成于上面的步骤一一对应。
定义一个任务类:
/*abstract*/ class Task : IGatherData, IAllotMachine, IDeployTestManchine, INotifyUser // 这里是分别为以上四个步骤定义的接口
{
// 任务在数据库里对应的ID
private string taskIdInDataTable;
p...[ 查看全文 ]