C#观察者模式:牛顿成绩案例详解与代码
143 浏览量
更新于2024-09-01
收藏 90KB PDF 举报
在C#编程中,观察者模式是一种常用的软件设计模式,它允许对象之间建立一种松散耦合的关系,当一个对象(被观察者)的状态发生变化时,所有依赖于它的对象(观察者)都能得到通知并相应地更新它们的行为。本文将以解决牛顿童鞋的成绩问题为例,详细介绍这一模式的应用。
首先,观察者模式的基本理论定义如下:它描述了一个对象的变更会影响多个其他对象,这些对象作为观察者,会在变更发生时自动获取通知并执行适当的响应。这有助于实现模块间的解耦,提高系统的可维护性和扩展性。
在实际场景中,我们设想牛顿同学的期末考试成绩公布后,多个角色需要关注他的成绩:语文老师、英语老师、数学老师以及班主任。每个角色对成绩的关注点不同,但他们都通过观察者模式来获取最新的成绩信息。
为了实现这个功能,我们需要创建以下几个关键类:
1. 学生信息类 (Student):这是基础实体,包含学生的姓名属性。
```csharp
public class Student
{
public string Name { get; set; }
}
```
2. 成绩类 (Score):这是一个抽象类,用于封装成绩信息,并定义通知事件处理方法。
```csharp
public delegate void NotifyEventHandler(Score score);
public abstract class Score
{
public event NotifyEventHandler Notify;
protected virtual void OnNotify(Score score)
{
Notify?.Invoke(this, score);
}
// 其他属性和方法,如成绩详情
}
```
3. 具体科目成绩类 (例如:SubjectScore),作为观察者,每个科目都有自己的分数和通知事件处理。
```csharp
public class ChineseScore : SubjectScore
{
public int Chinese { get; set; }
public override void NotifyScore(Score score) => Console.WriteLine($"语文成绩:{Chinese}");
}
// 类似地,为英语和数学创建对应的SubjectScore子类
```
4. 班主任关注的总成绩类 (TeacherTeacherHead):作为一个综合观察者,关心学生的整体成绩。
```csharp
public class TeacherTeacherHead : SubjectScore
{
public ChineseScore Chinese { get; set; }
public EnglishScore English { get; set; }
public MathematicsScore Mathematics { get; set; }
public override void NotifyScore(Score score)
{
// 计算并显示总成绩
int totalScore = Chinese.Chinese + English.English + Mathematics.Mathematics;
Console.WriteLine($"班主任关注:牛顿总成绩:{totalScore}");
}
}
```
最后,当牛顿童鞋的成绩发布时,只需在成绩类中触发`Notify`事件,所有订阅者(各科老师和班主任)就会收到通知并更新他们的信息。
通过C#的观察者模式,我们可以实现一个灵活且易于扩展的系统,当牛顿童鞋的成绩发生变化时,无需修改已有的代码,只需要添加或修改观察者即可。这样的设计提高了代码的可复用性和可维护性,是面向对象编程中的一个重要设计原则。
2008-09-16 上传
2012-02-25 上传
2019-07-17 上传
2012-08-23 上传
2020-06-24 上传
2019-05-27 上传
2011-07-07 上传
2020-09-04 上传
2021-01-20 上传
weixin_38742647
- 粉丝: 25
- 资源: 932
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全