观察者模式

来源:互联网 发布:win7远程控制软件 编辑:程序博客网 时间:2024/06/12 23:01
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;


namespace TestListener
{
    // 观察者Interface
    public interface IObserver
    {
        void Notify(object obj);
    }


    public interface IObservalble
    {
        void AddListner(IObserver observer);
        void RemoveListener(IObserver observer);
    }




    public class ObservableImapl : IObservalble
    {
        protected List<IObserver> Observers = new List<IObserver>();


        public void AddListner(IObserver observer)
        {
            if (Observers.Contains(observer)) return;
            Observers.Add(observer);
        }


        public void RemoveListener(IObserver observer)
        {


            if (!Observers.Contains(observer)) return;
            Observers.Remove(observer);
        }


        public void NotifyObserver(object obj) 
        {
            foreach (IObserver o in Observers) 
            {
                o.Notify(obj);
            }
        }
    }


    public class MyObserver : IObserver 
    {
        private TextBlock c;
        public MyObserver(TextBlock c) 
        {
            this.c = c;
        }
        public void Notify(object obj)
        {
            c.Text = c.Text + "    " + obj.ToString();
           Console.WriteLine(obj.ToString());
        }
    }


    public class MyObservealbe : ObservableImapl 
    {
        public void doSomthing(string content) 
        {
            base.NotifyObserver(content);
        }


        public void Remove(string content) 
        {
            base.NotifyObserver(content);
        }
    }


    //实际调用的过程 
    public class MainClass
    {
        public static void DoMain(TextBlock c)
        {
            //创建观察者和被观察者 
            MyObserver ui = new MyObserver(c);
            MyObservealbe data = new MyObservealbe();


            //在被观察对象中注册观察者 
            data.AddListner(ui);


            //改变被观察对象中的数据,这时被观察者会通知观察者 
            data.doSomthing("do something");
            data.Remove("Remove something");
            data.RemoveListener(ui);


            //注销观察者,停止观察 
            data.RemoveListener(ui);
        }
    }
}
原创粉丝点击