반응형
옵저버 패턴
객체 간에 일대다 종속 관계를 정의하여 한 객체의 상태 변경이 다른 객체에 자동으로 통지되는 패턴.
게임 내에서 이벤트 시스템 또는 UI 업데이트와 같은 상황에서 유용합니다.
using UnityEngine;
using System;
// 이벤트에 대한 데이터
public class EventData
{
public string eventName;
public int eventValue;
}
// 옵서버 인터페이스
public interface IObserver
{
void OnNotify(EventData data);
}
// 옵서버를 관리하는 클래스
public class Subject
{
private List<IObserver> _observers = new List<IObserver>();
// 옵서버 등록
public void RegisterObserver(IObserver observer)
{
if (!_observers.Contains(observer))
{
_observers.Add(observer);
}
}
// 옵서버 제거
public void RemoveObserver(IObserver observer)
{
if (_observers.Contains(observer))
{
_observers.Remove(observer);
}
}
// 옵서버에게 알림
public void Notify(EventData data)
{
foreach (var observer in _observers)
{
observer.OnNotify(data);
}
}
}
// 예시로 사용할 옵서버
public class ExampleObserver : MonoBehaviour, IObserver
{
public void OnNotify(EventData data)
{
Debug.Log($"Event Received: {data.eventName}, Value: {data.eventValue}");
}
}
// 예시로 사용할 이벤트 발송자
public class EventSender : MonoBehaviour
{
private Subject _subject = new Subject();
private void Start()
{
EventData data = new EventData { eventName = "Example Event", eventValue = 42 };
_subject.Notify(data);
}
}
반응형