定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
类型:行为类模式
观察者模式的优点
观察者与被观察者之间是属于轻度的关联关系,并且是抽象耦合的,这样,对于两者来说都比较容易进行扩展。
观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理。但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比 较多的时候,性能问题是比较令人担忧的。并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死。
1、创建观察者执行方法接口
public interface Observe{ void Update(); }
2、创建通知者抽象接口、方法
public abstract class Subject{ private Listobserves = new List(); public void Add(Observe observe) { observes.Add(observe); } public void Delete(observe) { observes.Remove(observe); } public void Notify() { foreach(var item in observes) { item.Update(); } } }
3、具体通知者名称
public class ContractSubject{ public string SubjectState{get;set;} }
4、具体观察者实现
public class ContractObserve:Observe{ private ConstractSubject constractSubject; public string Name{get;set;} public ConstractObserve(ConstractSubject constractSubject) { constractSubject = constractSubject; } public void Update() { Console.Write("名字{0}执行{1}状态",Name,constractSubject.SubjectState); } }
5、控制台调用
ConstractSubject constractSubject = new ConstractSubject(); ConstractObserve constractObserve = new ConstractObserve(constractSubject ,"wangjx"); ConstractObserve constractObserve = new ConstractObserve(constractSubject ,"lili"); constractSubject.Add(constractObserve ); constractSubject.SubjectState="开始" constractSubject.Notify(); //日志打印: //名字wangjx执行开始状态 //名字lili执行开始状态
联系客服