美文网首页一步一坑
设计模式- 观察者模式(Observer Pattern)

设计模式- 观察者模式(Observer Pattern)

作者: 易兒善 | 来源:发表于2019-05-03 06:35 被阅读0次

    定义

    观察者模式(Observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

    C#例子

        public interface ISubject {
            void AddObserver(Observer observer);
            void DeleteObserver(Observer observer);
        }
        public class Subject: ISubject
        {
            private IList<Observer> _observers = new List<Observer>();
            private int _qantity;
            public int Qantity
            {
                get
                {
                    return _qantity;
                }
                set
                {
                    _qantity = value;
                    this.NotifyAllObservers();
                }
            }
            public void AddObserver(Observer observer) {
                _observers.Add(observer);
            }
    
            public void DeleteObserver(Observer observer)
            {
                _observers.Remove(observer);
            }
    
            private void NotifyAllObservers() {
                foreach (var observer in _observers) {
                    observer.Update();
                }
            }
        }
    
        public abstract class Observer
        {
            protected Subject _subject;
            public abstract void Update();
        }
    
        public class ObserverA : Observer
        {
            public override void Update()
            {
                Console.WriteLine("我是A,我知道你的数量改变了!");
            }
        }
        public class ObserverB : Observer
        {
            public ObserverB(Subject subject)
            {
                _subject = subject;
            }
            public override void Update()
            {
                Console.WriteLine("我是B,我知道你的数量改变成了"+_subject.Qantity);
            }
        }
    
            static void Main(string[] args)
            {
                Subject subject = new Subject();
                subject.AddObserver(new ObserverA());
                subject.AddObserver(new ObserverB(subject));
                subject.Qantity = 10;
                Console.ReadLine();
            }
    

    观察者模式参与者:

    • ISubject: 抽象的主题,被观察的对象,提供Attach和Detach Observer对象的接口
    • Subject: 具体的被观察对象,维持Subject状态。 当状态发生变化时,发送消息通知它的观察者。
    • Observer:抽象的观察者,定义一个发送变化通知更新的接口。
    • Observer*: 维持一个对Subject对象的引用, 保存subjects状态,实现当Observer接口发生变动时,subjects状态同步更新。

    观察者模式适用情形:

    • 当一个抽象模型有两个方面,其中一方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

    • 当对一个对象的改变需要同时改变其他对象,而不需要知道具体有多少对象有待改变。

    • 当一个对象必须通知其他对象,而它又不需要知道其它的通知对象是谁,那些其它对象是谁不影响它发送通知这件事。

    观察者模式特点:

    • 使用面向对象的抽象,Observer模式使得可以独立地改变目标与观察者,从而使二者之间的依赖关系达到松耦合。
    • 目标发送通知时,无需指定观察者,通知会自动传播。观察者自己决定是否需要订阅通知。
    • 在C#中的Event。委托充当了Observer接口,而提供事件的对象充当了目标对象,委托是比抽象Observer接口更为松耦合的设计。

    其他

    源码地址

    dotnet-design-patterns

    其他设计模式

    23种设计模式

    相关文章

      网友评论

        本文标题:设计模式- 观察者模式(Observer Pattern)

        本文链接:https://www.haomeiwen.com/subject/eeadnqtx.html