示例#1
0
 static void Test1()
 {
     try
     {
         MyComponent c = new MyComponent();
         c.Init();
     }
     catch (Exception exc)
     {
         Console.WriteLine(exc.GetType());
     }
 }
示例#2
0
        static void Main(string[] args)
        {
            //*MyComponent作为被观察者,即事件源(事件源持有事件),MyMonitor作为观察者。.net中的事件不太容易理解,如果看不明白的话,可以看第二个例子,那个例子是基于java中观察者模式的原型而用c#实现的观察者模式。
            MyComponent component = new MyComponent();
            MyMonitor   monitor   = new MyMonitor();

            component.MonitorList.Add(monitor);
            component.Init();
            component.Load();
            //*/

            //*这是个基于java的观察者模式,它比较标准,也容易理解。EatAction和SleepAction就是事件,MyActionSource就是事件源(即被观察者),MyActionListener就是观察者。这种写法就是每个事件都要一个单独的监听者列表。而第一个和第三个例子都是指定同一种监听者,至于若干个事件中监听哪个几个或哪一个都使用同一列表,使用上有一定局限性。建议使用这种,每个事件都有一个单独的监听者列表,这种写法比较麻烦,但是相对比较灵活。
            MyActionSource   actionSource        = new MyActionSource();
            MyActionListener eatActionListener   = new MyActionListener();
            MyActionListener sleepActionListener = new MyActionListener();

            actionSource.EatActionListenerList.Add(eatActionListener);
            actionSource.SleepActionListenerList.Add(sleepActionListener);
            actionSource.Eat();
            actionSource.Sleep();
            //*/


            //*这是一个简单pipeline模型,它模拟asp.net的请求管道处理模型。平时我们不用写下面行代码是因为asp.net底层机制通过我们的web.config中的httpmodules节点会帮我们自动注册到每个HttpApplication中去。平时我们只需自定义HttpModule即可,确实帮我们简化了很多步骤。

            //通过事件实现观察者模式,这里的MyHttpApplication即被观察者,也叫事件源。
            MyHttpApplication httpApplication = new MyHttpApplication();
            //实例化观察者MyHttpModule的实例
            MyHttpModule httpModule = new MyHttpModule();

            //注册MyHttpModule实例到事件源
            httpApplication.HttpModuleList.Add(httpModule);
            //模拟初始化HttpApplication
            httpApplication.Init();
            //模拟http上下文
            object httpContext = new object();

            //执行模拟的管道模型
            httpApplication.ProcessRequest(httpContext);
            //*/

            Console.ReadLine();
        }
示例#3
0
 void OnEnable()
 {
     _target  = (MyComponent)target; // сохраняем целевой объект как MyComponent
     lastType = _target.type;        // сохраняем текущий тип
     _target.Init();
 }