日期:2014-05-17  浏览次数:20475 次

一个问题的设计问题,关于反射和委托。
有这样一个要求,定时执行某些事件。
比如,有100个事件需要定时执行:
事件1:每周1执行
事件2:每月1号执行
事件3:每天执行
事件4....
这个架构该怎么弄呢?
目前我是这样的:
=========================================================
//一个委托
 public delegate void timeChangeHander(DateTime dt);
//=========================================================
//这个是定时执行的类
public class PlanDo
{
private DateTime dt{set;get;}
public PlanDo(DateTime dt)
{
this.dt=dt;
}
public event timeChangeHander timeChangeEvent;
protected virtual void PlanTaskExecute()
{
if (timeChangeEvent != null)
{
    timeChangeEvent(DateTime.Now);
}
public void DoTask()
{
 PlanTaskExecute();
 }
}
//=================================================
//定义一个执行任务的接口
public interface IBaseInter
{
 void doTask(DateTime dt);
}
//定义一个某些相似的任务的抽象类
public abstract class absSomeType:IBaseInter
    {
        public virtual bool isSuitDate(DateTime dt)
        {
            return false;
        }
        public virtual void doTask(DateTime dt)
        {
            if(isSuitDate(dt))
            {
                Console.WriteLine(“基类执行”);
            }
        }
    }
//接下来就是各个具体的执行类了。。。
//这个每月1号执行
public class ExecuteSomeType1 : absSomeType
    {
        public override bool isSuitDate(DateTime dt)
        {
if (dt.Day== 1)
            {
                return true;
            }
            return false;
        }
        public override void doTask(DateTime dt)
        {
            base.doTask(dt);
  Console.WriteLine(“子类1执行”);
        }
    }
//这个每周1执行
public class ExecuteSomeType2 : absSomeType
    {
        public override bool isSuitDate(DateTime dt)
        {
if (dt.DayOfWeek == DayOfWeek.Monday)
            {
                return true;
   &nb