• 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();
            }
        }
    }
  • 相关阅读:
    DBA-常用到的动态视图分析语句
    SQL Server 复制(Replication) ——事务复制搭建
    SQL Server 不同网段IP通过名称访问
    [javaEE] HTTP协议总结
    [android] 从gallery获取图片
    [android] 加载大图片到内存
    [javaEE] web应用的目录结构&配置虚拟主机
    [android] 代码注册广播接收者&利用广播调用服务的方法
    [android] 采用aidl绑定远程服务
    [Linux] Linux的环境变量
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993792.html
Copyright © 2020-2023  润新知