zoukankan      html  css  js  c++  java
  • 一个模式

    控制器

     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?说不清。

     

  • 相关阅读:
    排序算法-简单选择排序
    pygame模块的简介
    python设计模式之工厂模式
    一次完整的HTTP请求流程(当我们在浏览器输入一个URL后,发生了什么)
    HTTP协议,TCP、UDP协议
    Django rest framework框架中有哪些组件
    flask
    Flask上下文管理
    mac如何开启两个vmware虚拟机
    HTTP状态码
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3675982.html
Copyright © 2011-2022 走看看