23가지 디자인 모드 - - 관찰자 모드(Observer Pattern)

대상 간의 일대다 의존 관계를 정의합니다. 대상의 상태가 바뀌면 그 대상에 의존하는 모든 대상이 알림을 받고 자동으로 업데이트됩니다.
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 인터페이스보다 더욱 느슨하게 결합된 디자인이다.

좋은 웹페이지 즐겨찾기