23가지 디자인 모드 - - 관찰자 모드(Observer Pattern)
2040 단어 11가지 행위형 디자인 모델
public abstract class Observer
{
public abstract void Update();
}
public class Subject
{
private List subList = new List();
public void Attach(Observer observer)
{
subList.Add(observer);
}
public void Detach(Observer observer)
{
subList.Remove(observer);
}
public void Notify()
{
foreach (var item in subList)
{
item.Update();
}
}
}
public class ConcreteSubject : Subject
{
public string SubjectStatus
{
get;
set;
}
}
public class ConcreteObserver : Observer
{
private string name;
private string observerstate;
private ConcreteSubject sub;
public ConcreteObserver(ConcreteSubject subject,string name)
{
this.sub = subject;
this.name = name;
}
public override void Update()
{
observerstate = sub.SubjectStatus;
Console.WriteLine("Observer {0}'s new state is {1}", name, observerstate);
}
}
static void Main(string[] args)
{
ConcreteSubject s = new ConcreteSubject();
s.Attach(new ConcreteObserver(s, "x"));
s.Attach(new ConcreteObserver(s, "y"));
s.Attach(new ConcreteObserver(s, "z"));
s.SubjectStatus = "abc";
s.Notify();
Console.Read();
}
적용 상황: 추상 모델은 두 가지 측면이 있는데 그 중 하나는 다른 한 측면에 의존한다.이 둘을 독립된 대상에 봉하여 각각 독립적으로 바꾸고 복용할 수 있도록 하다.◊ 한 대상에 대한 변화는 다른 대상을 동시에 바꾸어야 하며 구체적으로 얼마나 많은 대상이 바뀌어야 하는지 알 필요가 없다.◊ 한 대상이 다른 대상에게 통지해야 할 때 다른 통지 대상이 누구인지, 다른 대상이 누구인지 알 필요가 없다. 그 대상이 누가 통지를 보내는 데 영향을 주지 않는지.
특징:◊ 대상을 대상으로 하는 추상적인 것을 사용하고 Observer 모드를 사용하면 목표와 관찰자를 독립적으로 변화시켜 양자 간의 의존 관계를 느슨하게 결합시킬 수 있다.◊ 대상이 알림을 보낼 때 관찰자를 지정하지 않아도 알림이 자동으로 전파된다.관찰자는 스스로 구독 알림이 필요한지 여부를 결정한다.◊ C#의 Event 입니다.의뢰는 Observer 인터페이스를 충당하고 이벤트를 제공하는 대상은 목표 대상을 충당하며 의뢰는 추상적인 Observer 인터페이스보다 더욱 느슨하게 결합된 디자인이다.