比如说steam发售了新游戏。。。。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ObserverStructure : MonoBehaviour
{
void Start()
{
// Configure Observer pattern
ConcreteSubject s = new ConcreteSubject();
//三个订阅者
s.Attach(new ConcreteObserver(s, "X"));
s.Attach(new ConcreteObserver(s, "Y"));
s.Attach(new ConcreteObserver(s, "Z"));
// Change subject and notify observers
s.SubjectState = "半条命3发售啦";
s.Notify();
// Change subject and notify observers again
s.SubjectState = "使命召唤100发售啦";
s.Notify();
}
}
/// <summary>
///监听对象
/// </summary>
abstract class Subject
{
private List<Observer> _observers = new List<Observer>();
public void Attach(Observer observer)
{
_observers.Add(observer);
}
public void Detach(Observer observer)
{
_observers.Remove(observer);
}
public void Notify()
{
foreach (Observer o in _observers)
{
o.Update();
}
}
}
/// <summary>
/// 具体监听对象
/// </summary>
class ConcreteSubject : Subject
{
//自身信息
private string _subjectState;
// Gets or sets subject state
public string SubjectState
{
get { return _subjectState; }
set { _subjectState = value;
Debug.Log("steam发布了一条新消息"+_subjectState);
}
}
}
/// <summary>
/// 监听者
/// </summary>
abstract class Observer
{
public abstract void Update();
}
/// <summary>
/// 具体监听者,有名字,订阅内容,订阅对象
/// </summary>
class ConcreteObserver : Observer
{
private string _name;
private string _observerState;
private ConcreteSubject _subject;
// Constructor
public ConcreteObserver(
ConcreteSubject subject, string name)
{
this._subject = subject;
this._name = name;
}
public override void Update()
{
_observerState = _subject.SubjectState;
Debug.Log("Observer "+ _name+"'得到了一条新动态 "+_observerState);
}
// Gets or sets subject
public ConcreteSubject Subject
{
get { return _subject; }
set { _subject = value; }
}
}
本文通过Unity游戏开发环境,详细介绍了观察者模式的实现过程。文章展示了如何使用该模式来通知多个订阅者有关主题状态的变化,例如当Steam平台发布新游戏时,多个观察者能够接收到更新的消息。此模式在游戏开发中用于处理事件通知和状态更新,提高了系统的响应性和灵活性。
699

被折叠的 条评论
为什么被折叠?



