• 观察者模式(observer行为)c#简单的例子


    观察者模式(observer行为)c#简单的例子

    几点:模式使观察目标和实现松耦合之间的依赖关系、通知会传播自己主动

    样本:玩家击中后发生一系列变化的敌人:后发爆炸、敌人少1一个....

    namespace adapterpattern
    {
        public partial class ObserverForm : Form
        {
            public ObserverForm()
            {
                InitializeComponent();
                BaseData.EnemyNumber = 100;
            }
    
            private void btnDisplay_Click(object sender, EventArgs e)
            {
              
                IObserver explosionEvent = new ExplosionEvent();//观察员1
                IObserver enemy = new Enemy();//观察员2
                player p1 = new player1();
                p1.AddObserver(explosionEvent);
                p1.AddObserver(enemy);
                listBox1.Items.Add(p1.Display());
            }
        }
        public static class BaseData//数据中转站
        {
            public static string DisplayString { get; set; }
            public static int EnemyNumber { get; set; }
        }
         public abstract class player
        {
            List<IObserver> observers = new List<IObserver>();//观察员列表
           protected  virtual void Notify()//遂个通知观察员
            {
                foreach (IObserver observer in observers)
                {
                    observer.Update();
                }
            }
            public virtual void AddObserver(IObserver observer)//添加观察员
            {
                observers.Add(observer);
            }
            public virtual void Delet(IObserver observer)//删除观察员
            {
                observers.Remove(observer);
            }
            public abstract string Display();
        }
        public class player1 : player
        {
            public override string Display()
            {
                Notify();//通知观察员;
                return BaseData.DisplayString + BaseData.EnemyNumber.ToString();
            }
        }
        public interface IObserver//观察员接口
        {
            void Update();
        }
        public class ExplosionEvent : IObserver //观察员1
        {
          public void Update()
            {
                BaseData.DisplayString = "显示爆炸";
            }
        }
        public class Enemy : IObserver //观察员2
        {
         public void Update()
            {
                BaseData.EnemyNumber -= 1;       //"敌人数降低1个"; 
            }
        }
    }
    

    此文件由朱朱编写,转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    软件工程课堂作业——计算最优惠价格
    团队项目——NABC
    二位数组
    第二次冲刺阶段 站立会议06
    第二阶段冲刺 站立会议05
    第二阶段冲刺 站立会议04
    第二阶段冲刺 站立会议03
    课程建议
    站立会议02
    第二阶段冲刺 站立会议01
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4720754.html
Copyright © 2020-2023  润新知