C#观察者模式的实现的一点理解。
来源:互联网 发布:南京江宁麒麟网络问政 编辑:程序博客网 时间:2024/04/25 18:02
今天研究了一下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 IList<fathClass> objs = new List<fathClass>() ;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 <value){Console.WriteLine(name +"兄弟 啥意思啊,你让我欠债啊") ;}this.disposit = this.disposit - value ;Console.WriteLine(name +"我支出了" + value.ToString()) ;Console.WriteLine(name +"我的存款还有" + disposit.ToString()) ;} virtual public void actionOfgetMoney(){if(objs.Count == 0){Console.WriteLine(name +"老来无子 ,要钱有啥用!") ;return ;} else{Console.WriteLine(name + "我有" +objs.Count.ToString()+"个儿子,我要把我的钱分给他们") ;}pay(10000) ;foreach(fathClass obj in objs ){obj.income(10000) ;obj.actionOfgetMoney() ;} } }//儿子类,同时也是一个观察者 sealed class firstsonClass: fathClass {public firstsonClass(string flag):base( flag){} override public void actionOfgetMoney(){Console.WriteLine(this.GetName()+"我有钱,我要投资建立商铺");} }//儿子类,同时也是一个观察者 sealed class secsonClass: fathClass {public secsonClass(string flag):base( flag){} override public void actionOfgetMoney(){Console.WriteLine(base.GetName() +"我有钱,我要买一套住房");} }}
运行结果如下
---------- run ----------=============== 运行C#程序 Write By cicnor===============老子我有儿子了 他的名字是:大儿子老子我有儿子了 他的名字是:小儿子老子我收入了10000老子我的存款还有10000老子我有2个儿子,我要把我的钱分给他们老子我支出了10000老子我的存款还有0大儿子我收入了10000大儿子我的存款还有10000大儿子我有钱,我要投资建立商铺小儿子我收入了10000小儿子我的存款还有10000小儿子我有钱,我要买一套住房=============== 程序结束 Copy cicnor 2001===============Output completed (0 sec consumed) - Normal Termination
- C#观察者模式的实现的一点理解。
- 对于观察者模式,Reactor模式,Proactor模式的一点理解
- 观察者模式的C#实现
- 观察者模式的理解
- 观察者模式的理解
- c#观察者模式的一般实现
- 三种观察者模式的C#实现
- 个人对单例模式和观察者模式及事件的一点理解
- 对观察者模式的理解
- Java观察者模式的理解
- Android观察者模式的理解
- Android观察者模式的理解
- 观察者模式的生动理解
- C# abstract的一点理解
- 观察者模式的简单实现
- 观察者模式的java实现
- swift观察者模式的实现
- swift观察者模式的实现
- vim超能力
- Eclipse中安装ADT插件的快速方法
- 美第一夫人花钱“大手大脚” 奥巴马劝说也无用
- 2012年 新的开始!
- 云计算下的数据中心架构
- C#观察者模式的实现的一点理解。
- 解密亚马逊虚拟超级计算机
- 使用using清理非托管资源
- 我的新年愿景
- WTL安装包(汉化版)发布
- 我的2011 憧憬2012
- hdoj 2050 折线分割平面【DP】【水】
- JPA实体多表映射
- 托管资源和非托管资源