using System.Collections.Generic;
public static void Main()
PlayerState p = new PlayerState("idle");
UI ui1 = new UI(p, "UI1");
UI ui2 = new UI(p, "UI2");
p.SetPlayerState("Attacking");
p.SetPlayerState("Defending");
p.SetPlayerState("None");
void AddObserver(Observer o);
void RemoveObserver(Observer o);
public interface Observer
public class PlayerState : Subject
List<Observer> observers;
public PlayerState(string state)
observers = new List<Observer>();
public void AddObserver(Observer o)
public void RemoveObserver(Observer o)
public void NotifyObservers()
foreach(Observer o in observers)
public void SetPlayerState(string newState)
public string GetPlayerState()
public class UI : Observer
PlayerState playerStateObj;
public UI(PlayerState s, string name)
playerStateObj.AddObserver(this);
playerState = playerStateObj.GetPlayerState();
if(playerState == "Attacking")
Console.WriteLine(name + " shows attack menu");
else if(playerState == "Defending")
Console.WriteLine(name + " shows defend menu");
Console.WriteLine(name + " shows idle menu");