zoukankan      html  css  js  c++  java
  • 行为型设计模式之-观察者模式

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

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

    上代码:

      /// <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

  • 相关阅读:
    初学 python 之 多级菜单实现原理
    初学 python 之 用户登录实现过程
    Sqlmap使用教程
    对伪静态网站实施注射
    干货!IT小伙伴们实用的网站及工具大集合!持续更新!
    lnmp、lamp、lnmpa一键安装包(Updated: 2016-4-12)
    如何入门 Python 爬虫?
    在Windows Live Writer中插入C# code
    IIS装好后,局域网不能访问
    修改win7登录界面
  • 原文地址:https://www.cnblogs.com/haunge/p/15039281.html
Copyright © 2011-2022 走看看