Heim  >  Artikel  >  Backend-Entwicklung  >  Wie löst das Observer-Muster in C# das Problem von Newtons Kinderschuhen?

Wie löst das Observer-Muster in C# das Problem von Newtons Kinderschuhen?

黄舟
黄舟Original
2017-09-05 15:03:111500Durchsuche

In diesem Artikel wird hauptsächlich das Beobachtermuster des C#-Entwurfsmusters zur Lösung des Problems von Newtons Kinderschuhen vorgestellt. Er beschreibt kurz das Prinzip des Beobachtermusters und analysiert die spezifischen Schritte der Verwendung des Beobachtermusters zur Lösung des Problems von Newtons Kinderschuhen Basierend auf spezifischen Beispielen werden relevante Betriebsfähigkeiten bereitgestellt, und der Demo-Quellcode ist beigefügt, damit sich Freunde in Not darauf beziehen können.

Dieser Artikel beschreibt das Beispiel des Observer-Musters C#-Entwurfsmuster zur Lösung des Problems von Newtons Kinderschuhen. Teilen Sie es als Referenz mit allen:

1. Theoretische Definition

Das Beobachtermuster beschreibt eine Eins-zu-viele-Beziehung. Wenn sich der Zustand eines Objekts ändert, werden andere Objekte über die Änderung benachrichtigt. und entsprechend reagieren.

2. Anwendungsbeispiele

Beschreibung der Nachfrage: Die Abschlussprüfungsergebnisse (Score) der Newton-Schüler wurden veröffentlicht, und Lehrer in allen Fächern möchten die Ergebnisse ihrer Schüler wissen. Punkte!
Der Chinesischlehrer (TeacherChinese) kümmert sich nur um Newtons Ergebnisse für Chinesisch (Chinesisch).
Der Englischlehrer (TeacherEnglish) kümmert sich nur um Newtons Ergebnisse für Englisch (Englisch).
Der Mathematiklehrer (TeacherMathematics) kümmert sich nur um Newtons Ergebnisse in Mathematik (Mathematik).
Der Klassenlehrer möchte sich über (TeacherTeacherHead) Newtons Ergebnisse in jedem Fach und die Gesamtpunktzahl (TotalScore) Gedanken machen.
Nachdem die Ergebnisse veröffentlicht wurden, werden die Lehrer in jedem Fach benachrichtigt (Benachrichtigen).

3. Spezifische Codierung

1. Fügen Sie die Schülerinformationsklasse hinzu, die nur ein Namensattribut hat.


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. Transkript (Ergebnis)


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 🎜>


4. Englischlehrer
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+"分");
  }
 }
}


5. Mathematiklehrer
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 + "分");
  }
 }
}


6. Klassenlehrer
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 + "分");
  }
 }
}


7. Das Folgende ist der Hauptfunktionsaufruf
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 + " 分");
  }
 }
}


8. Ergebnisse ausführen
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();
  }
 }
}

9. Die Verwendung von Ereignissen und Benachrichtigungen, die von der C#-Sprache bereitgestellt werden, kann das Beobachtermuster eleganter machen erreichen. Die += Durchführung von Veranstaltungen ist wirklich sehr erfreulich.

Das obige ist der detaillierte Inhalt vonWie löst das Observer-Muster in C# das Problem von Newtons Kinderschuhen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn