• 设计模式:学习笔记(2)——观察者模式


    设计模式:学习笔记(2)——观察者模式

    观察者模式

       观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,他的所有依赖者都会收到通知并自动更新
       就好像下面这样:当主题对象中的一些状态发生改变时,就会通知他的观察者,狗、猫、鸭子等,但是牛并不是观察者,所以不会收到通知。
      

    从这幅图我们发现:

    ☐ 所有的观察者都需要遵守一定的准则,才能区别于非观察者对象。观察者会收到通知并更新,说明他们有一个共同的方法,可以是update(),故我们可以让他们继承同一个接口。

    ☐ 主题对象一定是有一个观察者列表,并且这个列表可以动态更新,他在通知时可以根据列表来推送消息。

    观察者模式的类图

      

    说明:

      Subject是主题接口,使用此接口中的RegisterObserver来注册接口,等等。 所有潜在的观察者必须实现观察者接口,这个接口只有Update()一个方法,当主题状态改变时它被调用。

    观察者模式实现

    构建观察者与主题对象

    构建观察者

    所有的观察者实现Observer

    public class CatObserver implements Observer{
        //所有观察者实现观察者接口
        public void update(Object args){}
    }

    我们一共实现了三个观察者

      

    构建主题对象

    被观察者即主题对象需要继承Observable类

    public abstract class Observable{
        List<Object> observers= new ArrayList<>();
        public void notifyObservers(String info)
        {
            obserbers.forEach(animal -> animal.update(info))
        }
        public void addObserver(Object o)
        {
            observers.add(o);
        }
        .....
    }
    
    public class SubjectObserable  extends Observable {
        ....
    }
    说明:一个 observable 对象可以有一个或多个观察者。观察者可以是实现了 Observer 接口的任意对象。一个 observable 实例改变后,调用 Observable 的 notifyObservers 方法的应用程序会通过调用观察者的 update 方法来通知观察者该实例发生了改变。

    实现通知

    public static void main(String[] args) {
        SubjectObserable subject = new SubjectObserable();
        subject.addObserver(new MouseObserver());
        subject.addObserver(new CatObserver());
        subject.addObserver(new DogObserver());
        subject.notifyObservers("发生了新的变化!");
    }
  • 相关阅读:
    腾讯分析系统架构解析
    GreenPlum简单性能测试与分析--续
    我的一些提高效率的设置
    Windows 上借助注册表来修改键盘按键的映射
    WPF入门——Converter、XAML和Style
    30个极大提高开发效率的Visual Studio Code插件(转)
    USB PD充电
    macOS Mojave 美化一下终端
    WPF入门(4)——资源
    使用Duilib开发Windows软件(5)——使用VLC做视频播放
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6558636.html
Copyright © 2020-2023  润新知