一个模式

控制器

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 

 6 namespace RGeos.FrameWork.MVC  7 {  8     //控制类

 9     public interface IController 10  { 11         string Name { get; } 12         IExecutor Executor { get; } 13         IObserver Observer { get; } 14  } 15     public abstract class AbstractController : IController 16  { 17         protected string mName; 18         protected IExecutor mExecutor; 19         protected IObserver mObserver; 20         //从外部传入被观察者 21         //控制器内部构造观察者,并向被观察者注册,观察者和控制器总是成对出现

22         protected AbstractController(string name, IExecutor executor) 23  { 24             this.mName = name; 25             this.mExecutor = executor; 26  } 27 

28         public virtual IExecutor Executor 29  { 30             get

31  { 32                 return this.mExecutor; 33  } 34  } 35 

36         public virtual string Name 37  { 38             get

39  { 40                 return this.mName; 41  } 42  } 43 

44         public virtual IObserver Observer 45  { 46             get

47  { 48                 return this.mObserver; 49  } 50  } 51         //业务逻辑

52         public virtual void HandExecuter() 53  { 54  } 55         public virtual bool OnRemove(object o, params object[] assistant) 56  { 57             return this.mExecutor.OnRemove(o, assistant); 58  } 59         public virtual bool OnAdd(object o, params object[] assistant) 60  { 61             return this.mExecutor.OnAdd(o, assistant); 62  } 63         public virtual bool OnReplace(object o, params object[] assistant) 64  { 65             return this.mExecutor.OnReplace(o, assistant); 66  } 67 

68  } 69 }
View Code

被观察者

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 

 6 namespace RGeos.FrameWork.MVC  7 {  8    //被观察者,执行者

 9     public interface IExecutor  10  {  11         string Name { get; }  12 

 13         bool IsStateChanged { get; }  14 

 15         bool NeedRefresh { get; }  16         //观察者集合

 17         List<IObserver> Observers { get; }  18 

 19         bool OnAdd(object o, params object[] assistant);  20         bool OnRemove(object o, params object[] assistant);  21         bool OnReplace(object o, params object[] assistant);  22 

 23         void NotifyObservers();  24         //添加观察者

 25         bool RegisterObserver(IObserver view);  26         //注销观察者

 27         bool UnRegisterObserver(IObserver view);  28         //注销所有观察者

 29         bool UnRegisterObservers();  30  }  31     public abstract class AbstractExecutor : IExecutor, ICloneable  32  {  33         protected bool mIsStateChanged;  34         protected string mName;  35         protected bool mNeedRefresh;  36         protected List<IObserver> m_observers;  37         public bool IsStateChanged  38  {  39             get

 40  {  41                 return this.mIsStateChanged;  42  }  43  }  44 

 45         public string Name  46  {  47             get

 48  {  49                 return this.mName;  50  }  51  }  52         public bool NeedRefresh  53  {  54             get

 55  {  56                 return this.mNeedRefresh;  57  }  58  }  59 

 60         public List<IObserver> Observers  61  {  62             get

 63  {  64                 return this.m_observers;  65  }  66  }  67 

 68         protected AbstractExecutor(string name)  69  {  70             this.mName = name;  71             this.mNeedRefresh = true;  72             this.mIsStateChanged = false;  73             this.m_observers = new List<IObserver>();  74  }  75         protected AbstractExecutor()  76  {  77             this.mNeedRefresh = true;  78             this.mIsStateChanged = false;  79             this.m_observers = new List<IObserver>();  80  }  81 

 82 

 83         public virtual object Clone()  84  {  85             return null;  86  }  87 

 88         public virtual bool RegisterObserver(IObserver observer)  89  {  90             if (this.m_observers == null)  91  {  92                 this.m_observers = new List<IObserver>();  93  }  94             if (!this.m_observers.Contains(observer))  95  {  96                 this.m_observers.Add(observer);  97                 return true;  98  }  99             return false; 100  } 101 

102         public virtual bool UnRegisterObserver(IObserver observer) 103  { 104             if (this.m_observers != null) 105  { 106                 while (this.m_observers.Contains(observer)) 107  { 108                     return this.m_observers.Remove(observer); 109  } 110  } 111             return false; 112  } 113 

114         public virtual bool UnRegisterObservers() 115  { 116             if (this.m_observers != null) 117  { 118                 this.m_observers.Clear(); 119                 this.m_observers = null; 120                 return true; 121  } 122             return false; 123  } 124 

125         public virtual bool OnAdd(object o, params object[] assistant) 126  { 127             this.mIsStateChanged = true; 128             this.NotifyObservers(); 129             return true; 130  } 131         public virtual bool OnRemove(object o, params object[] assistant) 132  { 133             this.mIsStateChanged = true; 134             this.NotifyObservers(); 135             return true; 136  } 137         public virtual bool OnReplace(object o, params object[] assistant) 138  { 139             this.mIsStateChanged = true; 140             this.NotifyObservers(); 141             return true; 142  } 143         public virtual void NotifyObservers() 144  { 145             if (this.mNeedRefresh) 146  { 147                 if (this.mIsStateChanged) 148  { 149                     foreach (IObserver observer in this.m_observers) 150  { 151                         observer.OnUpdate(this); 152  } 153  } 154  } 155             this.mIsStateChanged = false; 156  } 157  } 158 

159 }
View Code

观察者

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 

 6 namespace RGeos.FrameWork.MVC  7 {  8     //观察者

 9     public interface IObserver 10  { 11         IController Controller { get; } 12         IExecutor Executor { get; } 13         string Name { get; } 14 

15         void InitializeObserver(); 16         //更新观察者

17         void OnUpdate(IExecutor currentExecutor); 18  } 19     public abstract class AbstractObserver : IObserver 20  { 21         protected IController mController; 22         protected IExecutor mExecutor; 23         protected string mName; 24 

25         public abstract void InitializeObserver(); 26         public abstract void OnUpdate(IExecutor currentExecutor); 27 

28         public virtual IController Controller 29  { 30             get

31  { 32                 return this.mController; 33  } 34  } 35 

36         public virtual IExecutor Executor 37  { 38             get

39  { 40                 return this.mExecutor; 41  } 42  } 43 

44         public virtual string Name 45  { 46             get

47  { 48                 return this.mName; 49  } 50  } 51         //观察者通过控制器引用,调用被观察者的方法,更新其他的观察者。 52         //此时观察者和被观察者不通信

53         protected AbstractObserver(string name, IController controller) 54  { 55             this.mName = name; 56             this.mController = controller; 57             this.mExecutor = controller.Executor; 58  } 59         //在控制器中构造观察者时,将被观察者传入观察者,这样观察者可以调用被观察者中的数据。 60         //此时观察者和被观察者通信

61         protected AbstractObserver(string name, IController controller, IExecutor executor) 62  { 63             this.mName = name; 64             this.mController = controller; 65             this.mExecutor = executor; 66  } 67  } 68 

69 }
View Code

这个是MVC还是MVP?说不清。

 

你可能感兴趣的:(模式)