设计模式-》观察者模式
例子
教会(Subject)
教会成员(Observer)
public class GuildSubject
{
private List<AbsSubscriber<GuildSubject>> _subscribers;
public GuildSubject(string guildName)
{
GuildName = guildName;
_subscribers = new List<AbsSubscriber<GuildSubject>>();
}
public void AddObserver(AbsSubscriber<GuildSubject> obj)
{
_subscribers.Add(obj);
}
public void RemoveObserver(AbsSubscriber<GuildSubject> obj)
{
_subscribers.Remove(obj);
}
public void SendData(string data)
{
foreach (var subscriber in _subscribers)
{
subscriber.ReceiveData(this, data);
}
}
public string GuildName { get; }
}
public interface IObserver<Subject>
{
void ReceiveData(Subject subject, string data);
}
public abstract class AbsSubscriber<Subject> : IObserver<Subject>
{
public AbsSubscriber(string name)
{
Name = name;
}
public string Name { get; }
public abstract void ReceiveData(Subject subject, string data);
}
public class GuildSubscriber : AbsSubscriber<GuildSubject>
{
public GuildSubscriber(string name) : base(name)
{
}
public override void ReceiveData(GuildSubject subject, string data)
{
Console.WriteLine($"{this.Name}收到{subject.GuildName}教会的消息:{data}");
}
}
private static void SubjectTest()
{
var guildSubject = new GuildSubject("牛逼教会");
guildSubject.AddObserver(new GuildSubscriber("信徒1"));
guildSubject.AddObserver(new GuildSubscriber("信徒2"));
guildSubject.AddObserver(new GuildSubscriber("信徒3"));
guildSubject.SendData("牛逼起来啦");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步