前段时间,看了下网上讲的设计模式的 观察者模式,呵呵,记得有一个很爽的例子,今天闲着没事,就写写来看看.

高中的时候,班上班长是一个女的,n漂亮,身材n好,哪个时候,不知道是多少男生暗恋的对象.
呵呵,可惜,当时一个二个男的都找不到很好的方法,以至,都没追到,如果说现在回到以前,呵呵,用设计模式来解说 这个追美女的过程,至少来说,如果我要获得美女今天在哪个位置,呵呵,我就不用在头疼了,呵呵,你可以说,给她的手机装个移动的什么位置的业务,呵呵,那就可以随时获得她的位置,但是,你如果都到了能够搞到她的手机的地步,那应该就不用追了,直接就是你的了.

呵呵,由代码来说吧.

首先,美女

 public class 美女
    {
        public event LocationDelegate 美女位置改变;
        public 美女()
        {
 
        }
        public void Move(string mLocation)
        {
            this.location = mLocation;
            OnMove(location);
           
        }
        protected void OnMove(string mLocation)
        {
            if (this.美女位置改变 != null)
            {
                美女位置改变(this, new LocationArg(mLocation));
            }
        }
        private string location;
        public string Location
        {
            get
            {
                return this.location;
            }
        }

        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public override string ToString()
        {
            return this.name.ToString();
        }
    }

  public class LocationArg:EventArgs
    {
        private string location;
        public LocationArg(string mLocation)
        {
            this.location=mLocation;
        }
        public string Location
        {
            get
            {
                return location;
            }
        }
    }
    public delegate void LocationDelegate(object sender, LocationArg mLocationArg);


某个男生的观察美女位置的变化:
 

 

using System;
using System.Collections.Generic;
using System.Text;

namespace observer
{
   public interface 男生
    {
       string Name
       {
           get;
           set;
       }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace observer
{
    public class 某个男生:男生
    {
        private 美女 美女班长;
        public 某个男生(美女 班长)
        {
            美女班长 = 班长;
            美女班长.美女位置改变 += new LocationDelegate(美女班长位置改变);
        }

        void 美女班长位置改变(object sender, LocationArg mLocationArg)
        {
            string location = mLocationArg.Location.ToString();
        }

        private string mName;
        public string Name
        {
            get
            {
                return mName;
            }
            set
            {
                mName = value;
            }
        }

        public override string ToString()
        {
            return this.Name.ToString();
        }

      
    }
}

 public partial class Form1 : Form
    {
        美女 美女1 = new 美女();
        public Form1()
        {
            InitializeComponent();
            男生 男生1 = new 某个男生(美女1);
        }

    

        private void button1_Click(object sender, EventArgs e)
        {
            美女1.Move("美女在解放公园");
        }
      
    }
}

呵呵,按照这样的设计,以后男生要知道美女班长某个时候在哪儿,就不用在自己打电话问她了,呵呵,只要美女班长位置一改变,男生就可以获得美女班长的位置了,哈哈,多爽.....美女,等我...呵呵.

看了别人一篇文章:
http://www.cnblogs.com/ruochen/archive/2007/12/16/996706.html
有点困惑,
呵呵.
及到底是在 被观察者处注册观察者的信息呢?还是由在观察者处保持一个被观察者的信息.

呵呵,可以看看上面那篇文章,疑问也提到哪儿了.

posted on 2007-12-17 13:33  颜昌钢  阅读(310)  评论(0编辑  收藏  举报