Maison  >  Article  >  développement back-end  >  Un exemple de la façon dont le modèle Observer en C# résout le problème des chaussures pour enfants de Newton

Un exemple de la façon dont le modèle Observer en C# résout le problème des chaussures pour enfants de Newton

黄舟
黄舟original
2017-09-02 14:08:421241parcourir

Cet article présente principalement le modèle Observer du modèle de conception C# pour résoudre le problème des chaussures pour enfants de Newton. Il décrit brièvement le principe du modèle observateur et analyse les étapes spécifiques de l'utilisation du modèle observateur pour résoudre le problème des chaussures pour enfants de Newton. sur la base d'exemples spécifiques. Des compétences opérationnelles pertinentes sont fournies et le code source de la démonstration est joint pour que les lecteurs puissent le télécharger et s'y référer. Les amis dans le besoin peuvent s'y référer

Cet article décrit l'exemple du modèle Observer en C#. modèle de conception pour résoudre le problème des chaussures pour enfants de Newton. Partagez-le avec tout le monde pour référence, comme suit :

1. Définition théorique

Le modèle d'observateur décrit une relation un-à-plusieurs. Lorsque l'état d'un objet change, les autres objets seront informés du changement. et réagir en conséquence.

2. Exemples d'application

Description de la demande : les résultats de l'examen final (Score) des étudiants de Newton sont sortis et les enseignants de toutes les matières veulent connaître ceux de leurs élèves. des scores !
Le professeur de chinois (TeacherChinese) ne se soucie que des scores de Newton en chinois (chinois).
Le professeur d'anglais (TeacherEnglish) ne se soucie que des scores d'anglais (English) de Newton.
Le professeur de mathématiques (TeacherMathematics) ne se soucie que de Mathématiques de Newton ( Mathématiques).
L'enseignant de la classe veut se préoccuper des scores de (TeacherTeacherHead) de Newton dans chaque matière et du score total (TotalScore).
Après la publication des résultats, les enseignants de chaque matière seront informés ( Notifier).

3. Codage spécifique

1. Ajoutez la classe d'informations sur l'élève, qui n'a qu'un seul attribut Nom.


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. Transcription (Partition)


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. Professeur d'anglais
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. Professeur de mathématiques
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. Professeur de classe
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 Ce qui suit est l'appel de fonction principal
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. Résultats d'exécution

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.Résumé

L'utilisation d'événements et de notifications fournis par le langage C# peut rendre le modèle d'observateur plus élégant. accomplir. Le fonctionnement += des événements est vraiment très heureux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn