• 【Unity与23种设计模式】观察者模式(Observer)


    GoF中定义:

    “在对象之间定义一个一对多的连接方法,当一个对象变换状态时,其他关联的对象都会自动收到通知。”

    现实中,社交网络就是个例子。

    以前的报社,每次出新刊的时候,

    报刊便会将新刊一本一本的送到订阅报刊人的手中

    于是,每次出新刊,报社都得送到每个人的手中

    而如今的微博,便是应用了观察者模式

    当想关注某个人时,只需要点击关注便可订阅

    当关注的人更新微博时,只需要更新到微博平台

    订阅的人就可以接收到更新的消息

    而不需要被关注的那个人向每个订阅者发送消息

    C#中的事件系统(Event)便是使用的观察者模式

    Unity中的所有事件(如UI点击事件)也是应用的观察者模式

    //事件接口
    public abstract class Subject {
        List<Observer> m_Observers = new List<Observer>();
    
        public void Attach(Observer theObserver) {
            m_Observers.Add(theObserver);
        }
    
        public void Detach(Observer theObserver) {
            m_Observers.Remove(theObserver);
        }
    
        public void Notify() {
            foreach (Observer theObserver in m_Observers)
                theObserver.Update();
        }
    }
    //实现事件
    public class ConcreteSubject : Subject {
        string m_SubjectState;
    
        public void SetState(string state) {
            m_SubjectState = state;
            Notify();
        }
    
        public string GetState() {
            return m_SubjectState;
        }
    }
    //观察者接口
    public abstract class Observer {
        public abstract void Update();
    }
    //实现观察者
    public class ConcreteObserver : Observer {
        string m_SubjectState;
    
        ConcreteSubject m_Subject = null;
    
        public ConcreteObserver(ConcreteSubject theSubject){
            m_Subject = theSubject;
        }
    
        public override void Update()
        {
            Debug.Log("ConcreteSubject.Update");
        }
    }
    //测试类
    public class TestObserver {
        private void UnitTest() {
            ConcreteSubject theSubject = new ConcreteSubject();
    
            ConcreteObserver theObserver = new ConcreteObserver(theSubject);
            theSubject.Attach(theObserver);
    
            theSubject.SetState("Subject状态1");
        }
    }

    观察者模式的设计原理是,先设置一个主题(Subject)

    让这个主题发布时可同时通知关心这个主题的观察者/订阅者

    并且主题不必理会观察者/订阅者接下来会执行哪些操作

    观察者模式的主要功能和优点:

    将“主题发生”与“功能执行”这两个操作解除绑定

    文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

  • 相关阅读:
    sql server数据库中char,varchar,nvarchar字段的区别
    在Notepad++中为Python配置编译环境
    react-navigation笔记
    React Native之语法规范
    Node.js学习笔记
    Java与C#对照笔记
    iOS常用配置注意事项
    React Native之RNRF框架源码解析
    React Native之Redux相关
    keytool常用方法
  • 原文地址:https://www.cnblogs.com/fws94/p/7453043.html
Copyright © 2020-2023  润新知