【设计模式】观察者模式
观察者模式是一种行为设计模式,它定义了对象之间的一对多关系,当一个对象状态发生改变时,它的所有依赖者(观察者)都会收到通知并自动更新。
以下是实现代码:
// 主题接口
internal interface ISubject
{
void Add(IObserver obj);
void Del(IObserver obj);
void Notify(string msg);
}
// 观察者接口
internal interface IObserver
{
void Update(string msg);
}
// 具体主题类
internal class ContextSubject : ISubject
{
List<IObserver> Observers = new List<IObserver>();
public void Add(IObserver obj)
{
Observers.Add(obj);
}
public void Del(IObserver obj)
{
Observers.Remove(obj);
}
public void Notify(string msg)
{
foreach (var observer in Observers)
{
observer.Update(msg);
}
}
public void ShowMsg(string msg)
{
Notify(msg);
}
}
// 具体观察者类
internal class ContextObserver : IObserver
{
public string Name { get; set; } = string.Empty;
public ContextObserver(string name)
{
this.Name = name;
}
public void Update(string msg)
{
Console.WriteLine($"##> {this.Name} get msg: {msg}");
}
}
// 具体调用逻辑
ContextSubject subject = new ContextSubject();
ContextObserver observer1 = new ContextObserver("user1");
ContextObserver observer2 = new ContextObserver("user2");
subject.Add(observer1);
subject.Add(observer2);
subject.Notify("test msg 1");
Console.ReadKey();
示例代码: 示例代码
如果有错误的地方,还望各位多多指点
写个博客,来记录自己成长的一些经历,或许也能顺便帮助他人。
由于使用GitHub仓库作为图床,会有图片显示不出来的情况。
标签:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现