C# 观察者模式 Observer

using System;
using System.Collections.Generic;


namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {

            AllControlCenter acc = new ConcreteAllControlCenter("紫微大帝");
            IObserver player1, player2, player3, player4,player5;
            player1 = new Player("紫棋");
            player2 = new Player("初音");
            player3 = new Player("未来");
            player4 = new Player("大帝");
            player5 = new Player("十九");
            acc.Join(player4);
            acc.Join(player3);
            acc.Join(player2);
            acc.Join(player1);
            acc.Join(player5);
              acc.Remove(player5);
            player1.BeAttacked(acc);

            Console.WriteLine("观察者模式----事件模式---");
        }
    }

    // public delegate void EventHandle(object obj, EventArgs args);
    public abstract class AllControlCenter 
    {
        private string allName;
        protected List<IObserver> player = new List<IObserver>();

        protected string AllName { get => allName; set => allName = value; }
        public void Join(IObserver obs) 
        {
            Console.WriteLine("{0}加入{1}战队", obs.Name, this.AllName);
            this.player.Add(obs);
        }

        public void Remove(IObserver obs)
        {
            Console.WriteLine("{0}离开{1}战队", obs.Name, this.AllName);
            this.player.Remove(obs);
        }

        public abstract void NotifyObserver(string name);

    }
    public class ConcreteAllControlCenter : AllControlCenter 
    {
        public ConcreteAllControlCenter(string name) 
        {
            Console.WriteLine("{0}战队组建成功",AllName);
            this.AllName = name;
        }

        public override void NotifyObserver(string name)
        {
            Console.WriteLine("{0}战队通知,盟友{1}遭到攻击", this.AllName, name);


            foreach (var obs in player)
            {
                if (!((IObserver)obs).Name.Equals(name) )
                {
                    ((IObserver)obs).Help();
                }
            }
        }
    }


    public interface IObserver
    {
        string Name { get; set; }
        void Help();
        void BeAttacked(AllControlCenter arr);
    }

    public class Player : IObserver 
    {
        private string name;

        public Player(string name)
        {
            Name = name;
        }

        public string Name { get => name; set => name = value; }
      

        public void BeAttacked(AllControlCenter arr)
        {
            Console.WriteLine("{0}被攻击", this.Name);
            arr.NotifyObserver(this.Name);
        }

        public void Help()
        {   
            Console.WriteLine("坚持住,{0}来救你!",this.Name);

        }  
    }




}
战队组建成功
大帝加入紫微大帝战队
未来加入紫微大帝战队
初音加入紫微大帝战队
紫棋加入紫微大帝战队
十九加入紫微大帝战队

紫棋被攻击
紫微大帝战队通知,盟友紫棋遭到攻击
坚持住,大帝来救你!
坚持住,未来来救你!
坚持住,初音来救你!
坚持住,十九来救你!
观察者模式----事件模式---

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值