设计模式 观察者模式

前言

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

定义观察者接口

public abstract class BaseObserver {
    /**
     * 观察的是谁
     */
    Subject subject;

    /**
     *观察到改变,进行更新
     */
    abstract void update();

}

观察者实现类

public class ObserverOne extends BaseObserver {
    @Override
    void update() {
        System.out.println("ObserverOne:changed");
    }
}

public class ObserverTwo extends BaseObserver{
    @Override
    void update() {
        System.out.println("ObserverTwo:changed");
    }
}

public class ObserverThree extends BaseObserver{
    @Override
    void update() {
        System.out.println("ObserverThree:changed");
    }
}

定义被观察者类

import java.util.ArrayList;

/**
 * @author 阳光大男孩!!!
 * 被观察者类
 */
public class Subject {
    private ArrayList<BaseObserver> baseObservers;

    public Subject() {
        baseObservers = new ArrayList<>();
    }
    /**
     * 察觉到改变
     */
    public void change()
    {
        notifyAllObserver();
    }
    /**
     * 添加观察者
     * @param baseObserver
     */
    public void attachObserver(BaseObserver baseObserver)
    {
        this.baseObservers.add(baseObserver);
    }

    /**
     * 让所有的观察者进行改变
     */
    public void notifyAllObserver()
    {
        for(BaseObserver observer:baseObservers)
        {
            observer.update();
        }
    }

}

对被观察者进行改变

 public static void main(String[] args) {
        Subject subject = new Subject();
        subject.attachObserver(new ObserverOne());
        subject.attachObserver(new ObserverTwo());
        subject.attachObserver(new ObserverThree());

        subject.change();
    }

其他观察者会察觉到改变,从而进行改变。

ObserverOne:changed
ObserverTwo:changed
ObserverThree:changed

当一个对象状态的改变需要其他对象相应进行改变时,我们就需要观察者模式耦合带来的这种触发机制

使用场景举例

例如在操作系统设计文件系统中,对一个文件的文件名进行改变时,并不是只是文件自身对象属性的变更,还有目录对象的改变等等。

设计模式 观察者模式设计模式 观察者模式 阳光大男孩!!! 发布了210 篇原创文章 · 获赞 101 · 访问量 4万+ 私信 关注
上一篇:git报错host key has just been changed


下一篇:ABAP DEMO ALV-监听数据修改