行为型设计模式之-观察者模式

观察者模式定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

我反正是不太理解定义的意思!这样讲,事件是最优雅的观察者模式。知道事件是解决什么问题的,观察者也一样。就是外部定义注册流程逻辑。里面触发流程。

上代码:

  /// <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();
        }
    }

 

事件解决什么问题,观察者就解决什么问题。一回事。就是让订阅者订阅。发布者触发。订阅流程外部自己控制。

总结:还是那句话。行为型设计模式关注的是类和行为的。行为就是方法呗。再怎么折腾也是折腾这个方法抽象化。这样才好扩展。抽象这个方法就可以折腾接口和抽象类了。这个模式很简单

posted @ 2021-07-21 14:18  小换哥  阅读(40)  评论(0编辑  收藏  举报