当前位置: 首页 > news >正文

观察站模式

依赖倒置原则

依赖抽象,尽可能扩展而不是修改和破坏

 public abstract class Subject
    {
        IList<IAccountObserver> observerList = new List<IAccountObserver>();

        public void AddObserver( IAccountObserver observer )
        {
            observerList.Add( observer );
        }
        public void RemoveObserver( IAccountObserver observer )
        {
            observerList.Remove( observer );
        }

        public void Notify( UserAccountArgs args )
        {
            foreach( IAccountObserver observer in observerList )
            {
                observer.Update( args );
            }
        }
    }    
 public class UserAccountArgs
    {
        public string PhoneNumber;
        public string Email;
    }
  public class BankAccount : Subject
    {
        public void WithDraw( UserAccountArgs args )
        {
            Notify( args );
        }
    }
  public interface IAccountObserver
    {
        void Update(UserAccountArgs args);
    }
 public class Mobile:IAccountObserver
    {
        public void Update( UserAccountArgs args )
        {
        }
    }
public class Emailer:IAccountObserver
    {
        public void Update( UserAccountArgs args )
        {
        }
    }

调用

 static void Main( string[] args )
        {
            Subject subject = new BankAccount();
            
            UserAccountArgs arg = new UserAccountArgs();
            arg.Email = "";
            arg.PhoneNumber = "";

            IAccountObserver observer1 = new Emailer();
            IAccountObserver observer2 = new Mobile();

            subject.AddObserver( observer1 );
            subject.AddObserver( observer2 );

            subject.Notify( arg );
        }

 为了原则而模式不是为了模式而代码

相关文章:

  • Fiddler 抓包工具总结
  • iOS:iOS开发中用户密码保存位置
  • 在windows下如何快速搭建web.py开发框架
  • 八个最优秀的Android Studio插件
  • 游戏保护大放送之GPK
  • 面向对象之多态
  • 老板突然走了-被诏安
  • 免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
  • 常用笔记本规格表
  • 《构建之法》阅读梳理篇读后感
  • 如何下载一些网站本身不希望你下载的文件呢
  • 如何查看PC和Windows Mobile下蓝牙(Bluetooth)的Stack
  • 单页面应用SPA架构
  • 从Windows到Android开发
  • 使用 libssh 编写 client
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • JS 中的深拷贝与浅拷贝
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • js作用域和this的理解
  • Laravel 实践之路: 数据库迁移与数据填充
  • opencv python Meanshift 和 Camshift
  • React-flux杂记
  • SpringBoot 实战 (三) | 配置文件详解
  • 初探 Vue 生命周期和钩子函数
  • 后端_ThinkPHP5
  • 基于web的全景—— Pannellum小试
  • 前端_面试
  • 入门到放弃node系列之Hello Word篇
  • 小程序测试方案初探
  • 一个项目push到多个远程Git仓库
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​决定德拉瓦州地区版图的关键历史事件
  • (12)目标检测_SSD基于pytorch搭建代码
  • (20050108)又读《平凡的世界》
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)c52学习之旅-中断
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)jQuery 基础
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ***利用Ms05002溢出找“肉鸡
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net 4.0并行库实用性演练
  • .NET CORE Aws S3 使用
  • .net 受管制代码
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @SpringBootApplication 包含的三个注解及其含义
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [acm算法学习] 后缀数组SA