观察者模式(推模式)
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
IRedEnvelope redEnvelope = new RedEnvelope(100);
IObserver jackObserver = new Jack();
IObserver andreObserver = new Andre();
redEnvelope.AddObserver(jackObserver);
redEnvelope.AddObserver(andreObserver);
jackObserver.GrabRedEnvelope(redEnvelope);
andreObserver.GrabRedEnvelope(redEnvelope);
Console.ReadKey();
}
}
public interface IObserver
{
void ReceiveMessage(IRedEnvelope redEnvelope, string message);
void GrabRedEnvelope(IRedEnvelope redEnvelope);
}
public class Person : IObserver
{
private string _name;
public Person(string name)
{
_name = name;
}
public void ReceiveMessage(IRedEnvelope redEnvelope, string message)
{
Console.WriteLine($"{_name}接到信息:");
Console.WriteLine(message);
Console.WriteLine($"红包还剩{redEnvelope.Money}");
}
public void GrabRedEnvelope(IRedEnvelope redEnvelope)
{
int value = new Random().Next(0, redEnvelope.Money);
string message = string.Empty;
if (redEnvelope.Money > value)
{
redEnvelope.Money = redEnvelope.Money - value;
message = $"{_name}抢了{value}";
}
else
{
message = $"红包已空";
}
redEnvelope.NotifyMessage(message);
}
public string Name { get { return _name; } }
}
public class Jack : Person
{
public Jack() : base("jack")
{
}
}
public class Andre : Person
{
public Andre() : base("andre")
{
}
}
public interface IRedEnvelope
{
void AddObserver(IObserver observer);
void RemoverObserver(IObserver observer);
int Money { get; set; }
void NotifyMessage(string message);
}
public class RedEnvelope : IRedEnvelope
{
private int _money;
private List<IObserver> _listOberver = new List<IObserver>();
public int Money
{
get
{
return _money;
}
set {
_money = value;
}
}
public RedEnvelope(int money)
{
_money = money;
}
public void AddObserver(IObserver observer)
{
_listOberver.Add(observer);
}
public void RemoverObserver(IObserver observer)
{
_listOberver.Remove(observer);
}
public void NotifyMessage(string message)
{
foreach (var item in _listOberver)
{
item.ReceiveMessage(this, message);
}
}
}
}

浙公网安备 33010602011771号