• 观察者模式--初学入门


    理解不是很深,不做解说,自己写了个小例子记录下来

    例子以面试者去面试为主题,容易理解,例子简单(小白写的,能不简单吗),能看的懂的代码才是好代码啊

    观察者接口

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     /// <summary>
    10     /// 观察者接口
    11     /// </summary>
    12     interface IMSG
    13     {
    14         /// <summary>
    15         /// 出题
    16         /// </summary>
    17         void ShowMessage();
    18         /// <summary>
    19         /// 结果
    20         /// </summary>
    21         void Result();
    22     }
    23 }
    View Code

    观察者

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     /// <summary>
    10     /// 面试管
    11     /// </summary>
    12     public class MSG : IMSG
    13     {
    14         /// <summary>
    15         /// 面试状态
    16         /// </summary>
    17         public string state { get; set; }
    18         public GCZ_abstract gcz { get; set; }//面试者
    19         private List<GCZ_abstract> works = new List<GCZ_abstract>();//所有面试人员
    20         /// <summary>
    21         /// 添加面试人员
    22         /// </summary>
    23         /// <param name="gcz"></param>
    24         public void Add(GCZ_abstract gcz)
    25         {
    26             works.Add(gcz);
    27         }
    28         /// <summary>
    29         /// 删除面试人员
    30         /// </summary>
    31         /// <param name="gcz"></param>
    32         public void Remove(GCZ_abstract gcz)
    33         {
    34             works.Remove(gcz);
    35         }
    36         public void ShowMessage()
    37         {
    38             Console.WriteLine("欢迎来面试,我出题了。。。
    ");
    39         }
    40 
    41         /// <summary>
    42         /// 面试结果
    43         /// </summary>
    44         public void Result()
    45         {
    46             foreach(GCZ_abstract man in works)
    47             {
    48                 man.GX();
    49             }
    50         }
    51     }
    52 }
    View Code

    订阅类型

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     /// <summary>
    10     /// 面试人员集合
    11     /// </summary>
    12     public abstract class GCZ_abstract
    13     {
    14         /// <summary>
    15         /// 面试感想
    16         /// </summary>
    17         public abstract void GX();
    18     }
    19 }
    View Code

    类型一(订阅者)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     /// <summary>
    10     /// 具体观察者类型(面试人员)
    11     /// </summary>
    12     public class GCZ1 : GCZ_abstract
    13     {
    14         private MSG msg { get; set; }
    15         public GCZ1(MSG msg)
    16         {
    17             this.msg = msg;
    18         }
    19 
    20         public override void GX()
    21         {
    22             if (msg.state == "1")
    23             {
    24                 Console.WriteLine("面试官来了,很激动!");
    25             }
    26             else if (msg.state == "2") 
    27             {
    28                 Console.WriteLine("面试官还没来,很紧张!");
    29             }
    30             else
    31                 Console.WriteLine("面试官结束了,轻松!");
    32         }
    33     }
    34 }
    View Code

    类型二(订阅者)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     /// <summary>
    10     /// 具体观察者类型(面试人员)
    11     /// </summary>
    12     public class GCZ2 : GCZ_abstract
    13     {
    14         private MSG msg { get; set; }
    15         public GCZ2(MSG msg)
    16         {
    17             this.msg = msg;
    18         }
    19 
    20         public override void GX()
    21         {
    22             if (msg.state == "1")
    23             {
    24                 Console.WriteLine("面试官来了,我不动明王!");
    25             }
    26             else if (msg.state == "2")
    27             {
    28                 Console.WriteLine("面试官还没来,我不动明王!");
    29             }
    30             else
    31                 Console.WriteLine("面试结束,我面不改色!");
    32         }
    33     }
    34 }
    View Code

    结果

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             MSG msg = new MSG();//面试的面试官
    14             msg.ShowMessage();//面试官出题
    15             //面试中
    16             GCZ1 one = new GCZ1(msg);//面试者1
    17             msg.Add(one);
    18             GCZ2 two = new GCZ2(msg);//面试者2
    19             msg.Add(two);
    20 
    21             msg.state = "2";//面试状态
    22             msg.Result();
    23         }
    24     }
    25 }
    View Code
  • 相关阅读:
    [重回VB6]简单的QQWeb网游辅助工具开发之旅1、序言,另类的QQ登陆方法
    QQ和360大战我的观点
    不用IE Test ,快速对IE兼容性进行测试
    第八届软件设计大赛完全作品赛前评析与剧透
    屌丝如何分发大文件(大于1G)
    NetDog 酷炫版 0.1测试版发布
    Jquery制作的页码插件
    使用Html5+CSS3摆脱JS做带提示文字的输入框
    在nhibernate中,Load相同ID的实体对象的时候出错的问题!
    fieldset,legend
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/4330460.html
Copyright © 2020-2023  润新知