行为型设计模式之-观察者模式
观察者模式定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
我反正是不太理解定义的意思!这样讲,事件是最优雅的观察者模式。知道事件是解决什么问题的,观察者也一样。就是外部定义注册流程逻辑。里面触发流程。
上代码:
/// <summary> /// 观察者模式 /// </summary> public class ObserverPattern {
//发布 private List<IHandler> handlerList = new List<IHandler>(); /// <summary> /// 注册流程 /// </summary> /// <param name="handler"></param> public void AddHandler(IHandler handler) { handlerList.Add(handler); } //这里触发流程 public void MyHandler() { Console.WriteLine("这里执行其他程序"); if (handlerList.Count > 0) { foreach (var handler in handlerList) { handler.Pipeline(); } } } } public interface IHandler { /// <summary> /// 这里随便约束,你想约束啥方法都可以。 /// </summary> void Pipeline(); } public class SchoolHandler : IHandler { public void Pipeline() { Console.WriteLine("学校处理程序"); } } public class GovernmentHandler : IHandler { public void Pipeline() { Console.WriteLine("政府处理程序"); } } public class WorkshopSchoolHandler : IHandler { public void Pipeline() { Console.WriteLine("厂房处理程序"); } } public class FarmingHandler : IHandler { public void Pipeline() { Console.WriteLine("种田处理程序"); } }
调用端:
public class Program { /// <summary> /// 调用端 /// </summary> /// <param name="args"></param> public static void Main(int[] args) { ObserverPattern observerPattern = new ObserverPattern(); //注册 observerPattern.AddHandler(new SchoolHandler()); //注册 observerPattern.AddHandler(new GovernmentHandler()); //注册 observerPattern.AddHandler(new WorkshopSchoolHandler()); //注册 observerPattern.AddHandler(new FarmingHandler()); //触发 observerPattern.MyHandler(); } }
事件解决什么问题,观察者就解决什么问题。一回事。就是让订阅者订阅。发布者触发。订阅流程外部自己控制。
总结:还是那句话。行为型设计模式关注的是类和行为的。行为就是方法呗。再怎么折腾也是折腾这个方法抽象化。这样才好扩展。抽象这个方法就可以折腾接口和抽象类了。这个模式很简单
本文来自博客园,作者:小换哥,转载请注明原文链接:https://www.cnblogs.com/haunge/p/15039281.html