zoukankan      html  css  js  c++  java
  • CSharp设计模式读书笔记(20):观察者模式(学习难度:★★★☆☆,使用频率:★★★★★)

    观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

    模式角色与结构:

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.ObserverPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Subject subject = new ConcreteSubject();
    
                IObserver player1 = new ConcreteObserver();
                IObserver player2 = new ConcreteObserver();
                IObserver player3 = new ConcreteObserver();
                IObserver player4 = new ConcreteObserver();
    
                subject.Attach(player1);
                subject.Attach(player2);
                subject.Attach(player3);
                subject.Attach(player4);
    
                player1.BeAttacked(subject);
            }
        }
    
        abstract class Subject
        {
            protected List<IObserver> observers = new List<IObserver>();
    
            public void Attach(IObserver observer)
            {
                observers.Add(observer);
            }
    
            public void Detach(IObserver observer)
            {
                observers.Remove(observer);
            }
    
            public abstract void Notify();
        }
    
        class ConcreteSubject : Subject
        {
            public void Notify()
            {
                foreach (IObserver observer in observers)
                {
                    observer.Update();
                }
            }
        }
    
        interface IObserver
        {
            public void Update();
            public void BeAttacked(Subject subject);
        }
    
        class ConcreteObserver : IObserver
        {
            public void Update()
            {
                // To do the concrete 
            }
    
            public void BeAttacked(Subject subject)
            {
                subject.Notify();
            }
        }
    }
  • 相关阅读:
    [二叉树算法]关于层次遍历二叉树的一些算法总结
    数据库事务并发访问产生的问题及四种事务隔离级别
    当relative遇上z-index,阻断事件捕获
    关于CAS操作
    LRU算法与LRUCache
    Hadoop2.x 关于日志文件位置
    推荐系统架构图——我的软件工程概论课设
    文件上传+解析漏洞
    命令执行漏洞
    SSRF漏洞
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993792.html
Copyright © 2011-2022 走看看