/// <summary>
        /// 观察某个事件
        /// </summary>
        /// <param name="observer">观察者</param>
        /// <param name="name">事件名称</param>
        public void addObserver(IObserver observer,string name)
        {
            if(!this.IsHasObservers(observer,name))
            {
                Notification notice = new Notification();
                notice.name = name;
                notice.obj = null;
                notice.observer = observer;

                this.notifications.Add(notice);
            }
        }
        /// <summary>
        /// 观察某个事件
        /// </summary>
        /// <param name="observer">观察者</param>
        /// <param name="name">事件名称</param>
        /// <param name="priority">调用优先级</param>
        public void addObserver(IObserver observer, string name, int priority)
        {
            Notification res = this.notifications.Find(item => item.name == name && item.observer == observer);

            if (res != null && res.priority != priority)
            {
                res.priority = priority;
                return;
            }

            Notification notice = new Notification();
            notice.name = name;
            notice.obj = null;
            notice.observer = observer;
            notice.priority = priority;

            this.notifications.Add(notice);
        }
 public void Notice(Notification notification)
 {
     if (notification.name == "NodeUpdate")
     {
         this.BandIngTreeView(null, null);
     }
     else if (notification.name == "PreconditionUpdate")
     {
         this.BandIngTreeView(null, null);
     }
     else if (notification.name == "TreeUpdate")
     {
         this.name = this.treeHandler.Tree.Name;
         this.tabPage.Name = this.treeHandler.Tree.Name;
         if (this.isTemplate)
         {
             this.tabPage.Name = "(T)" + this.treeHandler.Tree.Name;
         }
         if (this.state == PageState.Edit)
         {
             this.tabPage.Text = this.tabPage.Name + "*";
         }
         else
         {
             this.tabPage.Text = this.tabPage.Name;
         }
     }
 }
        public void Notice(Notification notification)
        {
            List<Precondition> obj = (List<Precondition>)notification.obj;
            if (obj != null && obj.Count == 2)
            {
                Precondition org = obj[0];
                Precondition now = obj[1];

                if (org != null && now != null && now != this && org.name == this.name && org.type == this.type)
                {
                    this.name = now.name;
                    this.type = now.type;
                    this.childCount = now.childCount;
                    this.isBase = now.isBase;
                }
            }
        }
 public void Notice(Notification notification)
 {
     List<Node> obj = (List<Node>)notification.obj;
     if (obj != null && obj.Count == 2)
     {
         Node org = obj[0];
         Node now = obj[1];
         if (org != null && now != null && now != this && org.name == this.name && org.type == this.type)
         {
             this.name = now.name;
             this.type = now.type;
             this.isVirtual = now.isVirtual;
             this.loopCount = now.loopCount;
             this.finishCondition = now.finishCondition;
         }
     }
 }
        /// <summary>
        /// 触发事件
        /// </summary>
        /// <param name="name">事件名称</param>
        /// <param name="obj">传递参数</param>
        public void postNotification(string name,object obj)
        {
            List<Notification> res = this.notifications.FindAll(itme=>itme.name == name);
            if(res != null && res.Count > 0)
            {
                res.Sort((left, right) =>
                {
                    return left.priority.CompareTo(right.priority);
                });

                foreach (var item in res)
                {
                     if (item.observer != null)
                     {
                         Notification notice = new Notification();
                         notice.name = name;
                         notice.obj = obj;
                         notice.observer = item.observer;
                         notice.priority = item.priority;
                         item.observer.Notice(notice);
                     }
                }
            }
        }