등록 된 관측자들에게 메시지를 전달해주는 패턴. (EventListener 등과 같이 알게 모르게 많이 쓰이고 있습니다.)
인터페이스보다 델리게이트 사용이 더 간단한 듯합니다.
using System;
namespace ConsoleApp
{
class Program
{
public static void Main (string[] args)
{
Teacher t = new Teacher();
Observer_Student marine = new Observer_Student("마린");
Observer_Student zealot = new Observer_Student("질럿");
Observer_Student zergling = new Observer_Student("저글링");
t.AddStudent(marine);
t.AddStudent(zealot);
t.AddStudent(zergling);
Console.WriteLine();
t.ClassStart("달리기");
Console.WriteLine();
t.RemoveStudent(marine);
Console.WriteLine();
t.ClassStart("근접 공격");
Console.ReadKey();
}
}
class Teacher
{
private delegate void Teach(string subject);
private Teach teach;
public void AddStudent (Observer_Student student)
{
Console.WriteLine("{0}이 등록됩니다.", student.name);
teach += student.Learn;
}
public void RemoveStudent (Observer_Student student)
{
Console.WriteLine("{0}이 등록 해제됩니다.", student.name);
teach -= student.Learn;
}
public void ClassStart (string subject)
{
teach(subject);
}
}
class Observer_Student
{
public string name;
public Observer_Student(string name)
{
this.name = name;
}
public void Learn (string subject)
{
Console.WriteLine("{0}은 {1} 수업을 받고 있습니다.", name, subject);
}
}
}

'C# > 디자인 패턴' 카테고리의 다른 글
[C# 디자인패턴] 팩토리 패턴 Factory Pattern (0) | 2022.03.15 |
---|---|
[C# 디자인 패턴] 싱글톤 패턴 Singleton Pattern (0) | 2022.03.15 |
[C# 디자인 패턴] 스트래티지 패턴 Strategy Pattern (0) | 2022.03.15 |