• 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();
            }
        }
    }
  • 相关阅读:
    java多线程之系列目录
    RecyclerView的源码分析
    ConCurrentHashMap在1.7和1.8区别
    插件化之细节
    组件化之开发细节
    组件化之开发总结
    线程之volatile基本内容
    线程之Synchronized基本内容
    设计模式之动态代理模式原理介绍
    操作系统之内存映射
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993792.html
Copyright © 2020-2023  润新知