如题,能给此模式一个说明吗?谢谢了!

解决方案 »

  1.   

    观察者模式有经典的实现:
    using System;
    using System.Collections.Generic;public interface IObserver
    {
        void ISeeyou();
    }public class Sender
    {
        List<IObserver> observers = new List<IObserver>();    public void AddObserver(IObserver observer)
        {
            observers.Add(observer);
        }    public void CallObservers()
        {
            foreach (IObserver observer in observers)
            {
                observer.ISeeyou();
            }
        }    public void Work()
        {
            Console.WriteLine("After this, Call my observers:");
            //when finish doing my work
            CallObservers();
        }
    }public class Observer1 : IObserver
    {
        public void ISeeyou()
        {
            Console.WriteLine("Observer1 doing work...");
        }
    }public class Observer2 : IObserver
    {
        public void ISeeyou()
        {
            Console.WriteLine("Observer2 doing work...");
        }
    }class Program
    {
        [STAThread]
        public static void Main()
        {
            Sender sender = new Sender();
            sender.AddObserver(new Observer1());
            sender.AddObserver(new Observer2());
            sender.Work();
        }
    }以上的实现是不依赖于具体的语言,稍加修改就可以变成java或其他语言的observer模式.但是.net对于很多设计模式都可以根据独特的架构轻松实现,比如Observer可以很容易使用事件和委托实现.
      

  2.   

    补充一下以上程序的说明:就是sender对象不管它的观察者(observer1,2,...)会做哪些事,它只是按某种顺序把这些观察者注册到它的观察者列表(observers),然后在完成某项工作时发给observers一个信号,然后由观察者根据信号去做自己的事. 与其是在回答你的问题,不如说让自己复习一下,呵呵.
      

  3.   

    谢谢您的热心解答,有一处不太理解
    class Program
    {
        [STAThread]
        public static void Main()
        {
            Sender sender = new Sender();
            sender.AddObserver(new Observer1());
            sender.AddObserver(new Observer2());
            sender.Work();
        }
    }
    其中方法void AddObserver(IObserver observer)参数应该为IObserver类型,而这里传入的参数是
    new Observer1(),我认为是一个Observer1类的实例化对象,那参数类型不是不匹配了吗,
    还有接口类型没有构造函数,不能实例化,但是它能够作为一种参数的类型吗?我们一般参数都是int 或string类的我能理解,借口类型如何理解啊?能解释下吗,非常感谢!
      

  4.   

    对这种方法不是很了解,
      public void CallObservers()
        {
            foreach (IObserver observer in observers)
            {
                observer.ISeeyou();
            }
        }
    在这里observer.ISeeyou();是用了observer接口的方法,但是一般都是用实例化对象加点才能调用其中的方法(或静态方法则是类加点),而接口是不能实例化的啊,小弟不是很理解,能一并给予说明吗,谢谢了!
      

  5.   

    等你语法搞熟了 你就会用到很多类似 button.click+=new ...的东西
    等你想搞清楚究竟这些是什么的时候 你会发现  原来这就是.net framework实现的观察者
      

  6.   

    呃语言基础不扎实还辛苦人家高手介绍半天class Observer1 : IObserver这句的意思是 Observer1实现IObserver,
    可以理解为Observer1属于IObserver,是IObserver的一种。那么你说 new Observer1() 有问题吗?详细的一时说不清楚了,认真看基础去吧。