当对象之间存在一对多的关系时,若需要进行对象之间的通知,则可使用观察者模式
观察者模式属于行为型模式,当一个对象的状态发生改变时,若我们想通知其他对象,此时可通过观察者模式来进行解决。
1、定义抽象观察者
public abstract class observer { protected subject subject; public abstract void update(); }
2、定义观察者管理类
public class subject { private list<observer> observers = new list<observer>(); private int state; public int getstate() => this.state; public void setstate(int state) { this.state = state; nitifyallobservers(); } public void attach(observer observer) { observers.add(observer); } private void nitifyallobservers() { foreach (var observer in observers) { observer.update(); } } }
3、定义具体观察者
public class binaryobserver : observer { public binaryobserver(subject subject) { this.subject = subject; this.subject.attach(this); } public override void update() { console.writeline($"binary string:{subject.getstate()}"); } } public class hexaobserver:observer { public hexaobserver(subject subject) { this.subject = subject; this.subject.attach(this); } public override void update() { console.writeline($"hex string:{subject.getstate()}"); } } public class octalobserver:observer { public octalobserver(subject subject) { this.subject = subject; this.subject.attach(this); } public override void update() { console.writeline($"octal string:{subject.getstate()}"); } }
4、上层调用
class program { static void main(string[] args) { subject subject = new subject(); new hexaobserver(subject); new octalobserver(subject); new binaryobserver(subject); console.writeline("first state change:15"); subject.setstate(15); console.writeline("second state change:10"); subject.setstate(10); console.readkey(); } }
观察者模式通过一种集合方式将所有观察者管理起来,并最终循环遍历通知所有对象。
如对本文有疑问, 点击进行留言回复!!
【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
网友评论