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);
}
}
}
战队组建成功
大帝加入紫微大帝战队
未来加入紫微大帝战队
初音加入紫微大帝战队
紫棋加入紫微大帝战队
十九加入紫微大帝战队
紫棋被攻击
紫微大帝战队通知,盟友紫棋遭到攻击
坚持住,大帝来救你!
坚持住,未来来救你!
坚持住,初音来救你!
坚持住,十九来救你!
观察者模式----事件模式---