這篇文章主要介紹了C#設計模式之Observer觀察者模式解決牛頓童鞋成績問題,簡單講述了觀察者模式的原理並結合具體實例形式分析了使用觀察者模式解決牛頓童鞋成績問題的具體步驟相關操作技巧,並附帶demo源碼供讀者下載參考,需要的朋友可以參考下
本文實例講述了C#設計模式之Observer觀察者模式解決牛頓童鞋成績問題。分享給大家供大家參考,具體如下:
一.理論定義
#觀察者模式 描述了 一種 一對多的關係。 當某一物件的狀態改變時,其他物件會得到 改變的通知。並作出相應的反應。
二.應用範例
需求描述:牛頓同學的期末考成績(Score)出來了,各科老師都想知道自己的 學生 成績狀況!
語言老師(TeacherChinese)只關心 牛頓的語文(Chinese)成績.
英語老師(TeacherEnglish)只關心 牛頓的英語(English)成績.
數學老師(TeacherMathematics)只關心 牛頓的數學( Mathematics)成績.
班主任想關心(TeacherTeacherHead) 牛頓的各科成績和總成績(TotalScore).
成績出來後,各科老師都得到通知(Notify).
三.具體編碼
1.新增學生資訊類,裡面只有一個Name屬性。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Observer { /// <summary> /// 学生信息类 /// </summary> public class Student { /// <summary> /// 姓名 /// </summary> public string Name { get; set; } } }
2.成績單(Score)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Observer { public delegate void NotifyEventHandler(Score score); public class Score { public Score() { } //事件声明 public NotifyEventHandler NotifyEvent=null; /// <summary> /// 调用入口 /// </summary> public void Notify() { OnNotifyChange(); } /// <summary> ///通知事件 /// </summary> private void OnNotifyChange() { if (NotifyEvent != null) { NotifyEvent(this); } } /// <summary> /// 数学成绩 /// </summary> public float Mathematics { get; set; } /// <summary> /// 英语成绩 /// </summary> public float English { get; set; } /// <summary> /// 语文成绩 /// </summary> public float Chinese { get; set; } /// <summary> /// 三科总成绩 /// </summary> public float TotalScore { get { return Mathematics+English+Chinese; } } /// <summary> /// 学生基本信息 /// </summary> public Student student { get; set; } } }
3.語言老師
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Observer { /// <summary> /// 语文老师 /// </summary> public class TeacherChinese { public void Receive(Score score) { Console.WriteLine("我是语文老师,我只关心"+score.student.Name+"的语文成绩:"+score.Chinese+"分"); } } }
4.英文老師
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Observer { /// <summary> /// 英语老师 /// </summary> public class TeacherEnglish { public void Receive(Score score) { Console.WriteLine("我是英语老师,我只关心" + score.student.Name + "的英语成绩:" + score.English + "分"); } } }
5.數學老師
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Observer { /// <summary> /// 数学老师 /// </summary> public class TeacherMathematics { public void Receive(Score score) { Console.WriteLine("我是数学老师,我只关心" + score.student.Name + "的数学成绩:" + score.Mathematics + "分"); } } }
6 .班主任
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Com.Design.Gof.Observer { /// <summary> /// 班主任 /// </summary> public class TeacherTeacherHead { public void Receive(Score score) { string name=score.student.Name; Console.WriteLine("我是班主任,我要关心 " + name + " 的各科成绩和总成绩"); Console.WriteLine(name + "的 语文 成绩: " + score.Chinese + " 分"); Console.WriteLine(name + "的 英语 成绩: " + score.English + " 分"); Console.WriteLine(name + "的 数学 成绩: " + score.Mathematics + " 分"); Console.WriteLine(name + "的 总 成绩: " + score.TotalScore + " 分"); } } }
7.以下是主函數呼叫
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Com.Design.Gof.Observer; namespace Com.Design.Gof.Test { class Program { static void Main(string[] args) { #region Observer /*牛顿同学的成绩单*/ Score score = new Score { Chinese = 60, Mathematics = 100, English = 90, student = new Student { Name = "牛顿" } }; TeacherChinese teacherChinese = new TeacherChinese(); //语文老师 TeacherEnglish teacherEnglish = new TeacherEnglish();//英语老师 TeacherMathematics teacherMathematics = new TeacherMathematics();//数学老师 TeacherTeacherHead teacherTeacherHead = new TeacherTeacherHead();//班主任 //牛顿成绩单出来了,老师都想知道这个结果。 score.NotifyEvent += new NotifyEventHandler(teacherChinese.Receive); score.NotifyEvent += new NotifyEventHandler(teacherEnglish.Receive); score.NotifyEvent += new NotifyEventHandler(teacherMathematics.Receive); score.NotifyEvent += new NotifyEventHandler(teacherTeacherHead.Receive); //向 各 学科 老师发送 有针对性的,感兴趣的 成绩 score.Notify(); #endregion Console.ReadKey(); } } }
8.運行結果
#9.總結
應用C#語言提供的事件和通知,可以讓觀察者模式更加優雅的實現。事件的 +=操作,實在是讓人So happy。
以上是C#中Observer觀察者模式如何解決牛頓童鞋成績問題的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中