今天研究了一下c#观察者模式的实现。
我的理解那 不多说了,直接贴代码
代码如下
using System;using System.Data;using System.Text;using System.Collections;using System.Collections.Generic;namespace myStu{ /* cicnor 2012-01-01 本章学习一下c#的观察者模式。 实现的类包括, 老子,儿子 房地产商。 房地产商 通知老子,你们家补偿1000万 。 老子把钱分给了大儿子400万 ,分给了二儿子400万 大儿子拿钱买了一套房,二儿子用钱投资开了一家商店。 */ /* 实际学习中碰到的问题 1 构造器的继承 ?? */ /* 用到的知识点: 多态的实现 观察者模式的实现 封装 : 比如 存款,和名字,我不想被其他人知道,但是有些人是可以知道的,但是他们要通过一定的途径财经知道。 继承 : 是为了代码公用,比如 构造器,名称,存款的操作,这些都是一样的,所以可以用继承 多态 : 老子有钱了,儿子有钱了,他们的行为是不一样的,但是都是有钱了的动作,这个就叫做多态。本例子是通过重写虚函数来实现的。 观察者模式 :老子开始分钱了,那么我就要告诉儿子,我要分钱给你们了, 有一个疑问 : 儿子接受通知的这个事件名称是不是必须是相同的。不然老子怎么知道通过什么途径来让儿子知道了啊 1 方法名称要一样? 2 使用委托 ? 3 观察者的对象不一样,那么除了泛型 ,还有其他的实现方法吗? */ /*有时间把上边几个疑问研究一下!*/ class programe { static void Main(string[] arg) { try { fathClass obj = new fathClass("老子") ; obj.addobserver(new firstsonClass("大儿子")) ; obj.addobserver(new secsonClass("小儿子")) ; obj.income(10000) ; obj.actionOfgetMoney() ; } catch (Exception err) { Console.WriteLine(err.Message); } } } //老子类,有钱了,我就分给我儿子钱。 class fathClass { public fathClass() {} private string name ; public string GetName() { return name ; } public fathClass(string flag) { name = flag ; } private IListobjs = new List () ; public void addobserver(fathClass obj) { objs.Add(obj) ; Console.WriteLine(name +"我有儿子了 他的名字是:"+obj.GetName()) ; } public void removeobserver(fathClass obj) { objs.Add(obj) ; Console.WriteLine(name +"我减少一个人") ; } private double disposit ; //存款金额 //收入 public void income(double value) { if (value <=0) { Console.WriteLine(name +"你是一个骗子,我的收入能是负数吗!") ; } this.disposit = this.disposit + value ; Console.WriteLine(name +"我收入了" + value.ToString()) ; Console.WriteLine(name +"我的存款还有" + disposit.ToString()) ; } //支出 public void pay(double value) { if (value <=0) { Console.WriteLine(name +"兄弟 你傻了,我支付负数是啥意思啊!") ; } if(this.disposit
运行结果如下
---------- run ----------=============== 运行C#程序 Write By cicnor===============老子我有儿子了 他的名字是:大儿子老子我有儿子了 他的名字是:小儿子老子我收入了10000老子我的存款还有10000老子我有2个儿子,我要把我的钱分给他们老子我支出了10000老子我的存款还有0大儿子我收入了10000大儿子我的存款还有10000大儿子我有钱,我要投资建立商铺小儿子我收入了10000小儿子我的存款还有10000小儿子我有钱,我要买一套住房=============== 程序结束 Copy cicnor 2001===============Output completed (0 sec consumed) - Normal Termination