观察者模式
观察者模式,一个类中的变量发生改变,其他类能做出反应,像是在观察一样。是一个一对多的发布订阅关系。
原理:在一个类里维护一个数组或者链表,当其中的变量发生改变,遍历这个链表,调用这个链表中所有的对象中的对应的方法。
被观察者实现的接口interface ISubject
{
void Attach(IObserver observer);
void Detach(IObserver observer);
void Notify();
}
观察者实现的接口
interface IObserver
{
void Update(int i);
}
被观察者实现类
class Subject : ISubject
{
//维护的列表
private readonly List<IObserver> _list = new();
//需要监听的状态
private int _state;
public int State
{
get => _state;
set
{
_state = value;
Notify(); //当状态发生改变就告知列表中所有的对象
}
}
public void Attach(IObserver observer)
{
_list.Add(observer);
}
public void Detach(IObserver observer)
{
if (_list.Contains(observer))
{
_list.Remove(observer);
}
}
public void Notify()
{
foreach (var observer in _list)
{
observer.Update(State);
}
}
}
观察者实现类
class WhatObserver : IObserver
{
private Subject _subject;
public WhatObserver(Subject subject)
{
_subject = subject;
subject.Attach(this);
}
public void Update(int num)
{
Console.WriteLine($"MyClass中的值变成了{num}");
}
}
运行
public static class Program
{
public static void Main(string[] args)
{
var myClass = new Subject();
var whatObserver = new WhatObserver(myClass);
myClass.State = 5;
}
}
运行结果:
MyClass中的值变成了5
观察者模式可用于界面显示,数值改变了需要改动很多地方的显示,就能用这个模式。